Changeset 3280 for code/trunk
- Timestamp:
- Jul 12, 2009, 11:58:01 PM (15 years ago)
- Location:
- code/trunk
- Files:
-
- 2 deleted
- 180 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/core4 (added) merged: 3235-3237,3245-3250,3253-3254,3260-3261,3265,3270
- Property svn:mergeinfo changed
-
code/trunk/cmake/BuildConfigMSVC.cmake
r3196 r3280 35 35 36 36 # Currently VLD has a problem with MSVC9 although it actually is supported 37 IF(MSVC8 )37 IF(MSVC80) 38 38 OPTION(VISUAL_LEAK_DETECTOR_ENABLE "Memory leak detector" off) 39 39 ENDIF() -
code/trunk/src/core/ArgumentCompletionFunctions.cc
r3196 r3280 34 34 35 35 #include "util/Convert.h" 36 #include "util/String .h"36 #include "util/StringUtils.h" 37 37 #include "Identifier.h" 38 38 #include "ConfigValueContainer.h" … … 143 143 144 144 for (std::list<unsigned int>::const_iterator it = threadnumbers.begin(); it != threadnumbers.end(); ++it) 145 threads.push_back(ArgumentCompletionListElement( getConvertedValue<unsigned int,std::string>(*it)));145 threads.push_back(ArgumentCompletionListElement(multi_cast<std::string>(*it))); 146 146 147 147 return threads; -
code/trunk/src/core/BaseObject.cc
r3196 r3280 36 36 #include <tinyxml/tinyxml.h> 37 37 38 #include "util/String .h"38 #include "util/StringUtils.h" 39 39 #include "CoreIncludes.h" 40 40 #include "Event.h" -
code/trunk/src/core/CMakeLists.txt
r3196 r3280 68 68 TOLUA_FILES 69 69 CommandExecutor.h 70 Game.h71 70 LuaBind.h 72 71 DEFINE_SYMBOL -
code/trunk/src/core/CommandEvaluation.cc
r3196 r3280 30 30 31 31 #include "util/Debug.h" 32 #include "util/String .h"32 #include "util/StringUtils.h" 33 33 #include "ConsoleCommand.h" 34 34 #include "Identifier.h" … … 39 39 { 40 40 this->initialize(""); 41 this->state_ = C S_Uninitialized;41 this->state_ = CommandState::Uninitialized; 42 42 } 43 43 … … 64 64 65 65 this->errorMessage_ = ""; 66 this->state_ = C S_Empty;66 this->state_ = CommandState::Empty; 67 67 } 68 68 … … 104 104 switch (this->state_) 105 105 { 106 case C S_Uninitialized:107 break; 108 case C S_Empty:109 break; 110 case C S_ShortcutOrIdentifier:106 case CommandState::Uninitialized: 107 break; 108 case CommandState::Empty: 109 break; 110 case CommandState::ShortcutOrIdentifier: 111 111 if (this->function_) 112 112 { … … 119 119 return (this->command_ = this->functionclass_->getName() + " "); 120 120 break; 121 case C S_Function:121 case CommandState::Function: 122 122 if (this->function_) 123 123 { … … 128 128 } 129 129 break; 130 case C S_ParamPreparation:131 case C S_Params:130 case CommandState::ParamPreparation: 131 case CommandState::Params: 132 132 { 133 133 if (this->argument_ == "" && this->possibleArgument_ == "") … … 149 149 break; 150 150 } 151 case C S_Finished:152 break; 153 case C S_Error:151 case CommandState::Finished: 152 break; 153 case CommandState::Error: 154 154 break; 155 155 } … … 163 163 switch (this->state_) 164 164 { 165 case C S_Uninitialized:166 break; 167 case C S_Empty:168 case C S_ShortcutOrIdentifier:165 case CommandState::Uninitialized: 166 break; 167 case CommandState::Empty: 168 case CommandState::ShortcutOrIdentifier: 169 169 if (this->listOfPossibleFunctions_.size() == 0) 170 170 return CommandEvaluation::dump(this->listOfPossibleIdentifiers_); … … 174 174 return (CommandEvaluation::dump(this->listOfPossibleFunctions_) + "\n" + CommandEvaluation::dump(this->listOfPossibleIdentifiers_)); 175 175 break; 176 case C S_Function:176 case CommandState::Function: 177 177 return CommandEvaluation::dump(this->listOfPossibleFunctions_); 178 178 break; 179 case C S_ParamPreparation:180 case C S_Params:179 case CommandState::ParamPreparation: 180 case CommandState::Params: 181 181 if (this->listOfPossibleArguments_.size() > 0) 182 182 return CommandEvaluation::dump(this->listOfPossibleArguments_); 183 183 else 184 184 return CommandEvaluation::dump(this->function_); 185 case C S_Finished:185 case CommandState::Finished: 186 186 if (this->function_) 187 187 return CommandEvaluation::dump(this->function_); 188 188 break; 189 case C S_Error:189 case CommandState::Error: 190 190 return this->errorMessage_; 191 191 break; … … 200 200 201 201 for (unsigned int i = 0; i < MAX_FUNCTOR_ARGUMENTS; i++) 202 this->param_[i] = MT_ null;202 this->param_[i] = MT_Type::Null; 203 203 204 204 if (!this->isValid()) … … 230 230 return this->param_[index]; 231 231 232 return MT_ null;232 return MT_Type::Null; 233 233 } 234 234 … … 238 238 return this->function_->hasReturnvalue(); 239 239 240 return MT_ null;240 return MT_Type::Null; 241 241 } 242 242 -
code/trunk/src/core/CommandEvaluation.h
r1747 r3280 41 41 namespace orxonox 42 42 { 43 enumCommandState43 namespace CommandState 44 44 { 45 CS_Uninitialized, 46 CS_Empty, 47 CS_ShortcutOrIdentifier, 48 CS_Function, 49 CS_ParamPreparation, 50 CS_Params, 51 CS_Finished, 52 CS_Error 53 }; 45 enum Value 46 { 47 Uninitialized, 48 Empty, 49 ShortcutOrIdentifier, 50 Function, 51 ParamPreparation, 52 Params, 53 Finished, 54 Error 55 }; 56 } 54 57 55 58 class _CoreExport CommandEvaluation … … 112 115 113 116 std::string errorMessage_; 114 CommandState state_;117 CommandState::Value state_; 115 118 116 119 bool bEvaluatedParams_; -
code/trunk/src/core/CommandExecutor.cc
r3196 r3280 30 30 31 31 #include "util/Debug.h" 32 #include "util/String .h"32 #include "util/StringUtils.h" 33 33 #include "ConsoleCommand.h" 34 34 #include "Identifier.h" … … 141 141 void CommandExecutor::parseIfNeeded(const std::string& command) 142 142 { 143 if (CommandExecutor::getEvaluation().state_ == C S_Uninitialized)143 if (CommandExecutor::getEvaluation().state_ == CommandState::Uninitialized) 144 144 { 145 145 CommandExecutor::parse(command); … … 169 169 switch (CommandExecutor::getEvaluation().state_) 170 170 { 171 case C S_Uninitialized:171 case CommandState::Uninitialized: 172 172 { 173 173 // Impossible 174 174 break; 175 175 } 176 case C S_Empty:176 case CommandState::Empty: 177 177 { 178 178 if (CommandExecutor::argumentsGiven() == 0) … … 184 184 else 185 185 { 186 CommandExecutor::getEvaluation().state_ = C S_ShortcutOrIdentifier;186 CommandExecutor::getEvaluation().state_ = CommandState::ShortcutOrIdentifier; 187 187 // Move on to next case 188 188 } 189 189 } 190 case C S_ShortcutOrIdentifier:190 case CommandState::ShortcutOrIdentifier: 191 191 { 192 192 if (CommandExecutor::argumentsGiven() > 1) … … 199 199 { 200 200 // It's a shortcut 201 CommandExecutor::getEvaluation().state_ = C S_ParamPreparation;201 CommandExecutor::getEvaluation().state_ = CommandState::ParamPreparation; 202 202 CommandExecutor::getEvaluation().functionclass_ = 0; 203 203 // Move on to next case … … 206 206 { 207 207 // It's a functionname 208 CommandExecutor::getEvaluation().state_ = C S_Function;208 CommandExecutor::getEvaluation().state_ = CommandState::Function; 209 209 CommandExecutor::getEvaluation().function_ = 0; 210 210 // Move on to next case … … 213 213 { 214 214 // The first argument is bad 215 CommandExecutor::getEvaluation().state_ = C S_Error;215 CommandExecutor::getEvaluation().state_ = CommandState::Error; 216 216 AddLanguageEntry("commandexecutorunknownfirstargument", "is not a shortcut nor a classname"); 217 217 CommandExecutor::getEvaluation().errorMessage_ = "Error: " + CommandExecutor::getArgument(0) + " " + GetLocalisation("commandexecutorunknownfirstargument") + "."; … … 238 238 CommandExecutor::getEvaluation().bCommandChanged_ = true; 239 239 } 240 CommandExecutor::getEvaluation().state_ = C S_ParamPreparation;240 CommandExecutor::getEvaluation().state_ = CommandState::ParamPreparation; 241 241 CommandExecutor::getEvaluation().functionclass_ = 0; 242 242 CommandExecutor::getEvaluation().command_ = CommandExecutor::getEvaluation().function_->getName(); … … 258 258 CommandExecutor::getEvaluation().bCommandChanged_ = true; 259 259 } 260 CommandExecutor::getEvaluation().state_ = C S_Function;260 CommandExecutor::getEvaluation().state_ = CommandState::Function; 261 261 CommandExecutor::getEvaluation().function_ = 0; 262 262 CommandExecutor::getEvaluation().command_ = CommandExecutor::getEvaluation().functionclass_->getName() + " "; … … 266 266 { 267 267 // No possibilities 268 CommandExecutor::getEvaluation().state_ = C S_Error;268 CommandExecutor::getEvaluation().state_ = CommandState::Error; 269 269 AddLanguageEntry("commandexecutorunknownfirstargumentstart", "There is no command or classname starting with"); 270 270 CommandExecutor::getEvaluation().errorMessage_ = "Error: " + GetLocalisation("commandexecutorunknownfirstargumentstart") + " " + CommandExecutor::getArgument(0) + "."; … … 285 285 } 286 286 } 287 case C S_Function:287 case CommandState::Function: 288 288 { 289 289 if (CommandExecutor::getEvaluation().functionclass_) … … 298 298 { 299 299 // It's a function 300 CommandExecutor::getEvaluation().state_ = C S_ParamPreparation;300 CommandExecutor::getEvaluation().state_ = CommandState::ParamPreparation; 301 301 // Move on to next case 302 302 } … … 304 304 { 305 305 // The second argument is bad 306 CommandExecutor::getEvaluation().state_ = C S_Error;306 CommandExecutor::getEvaluation().state_ = CommandState::Error; 307 307 AddLanguageEntry("commandexecutorunknownsecondargument", "is not a function of"); 308 308 CommandExecutor::getEvaluation().errorMessage_ = "Error: " + CommandExecutor::getArgument(1) + " " + GetLocalisation("commandexecutorunknownsecondargument") + " " + CommandExecutor::getEvaluation().functionclass_->getName() + "."; … … 326 326 CommandExecutor::getEvaluation().bCommandChanged_ = true; 327 327 } 328 CommandExecutor::getEvaluation().state_ = C S_ParamPreparation;328 CommandExecutor::getEvaluation().state_ = CommandState::ParamPreparation; 329 329 CommandExecutor::getEvaluation().command_ = CommandExecutor::getEvaluation().functionclass_->getName() + " " + CommandExecutor::getEvaluation().function_->getName(); 330 330 if (CommandExecutor::getEvaluation().function_->getParamCount() > 0) … … 338 338 { 339 339 // No possibilities 340 CommandExecutor::getEvaluation().state_ = C S_Error;340 CommandExecutor::getEvaluation().state_ = CommandState::Error; 341 341 AddLanguageEntry("commandexecutorunknownsecondargumentstart", "has no function starting with"); 342 342 CommandExecutor::getEvaluation().errorMessage_ = "Error: " + CommandExecutor::getEvaluation().functionclass_->getName() + " " + GetLocalisation("commandexecutorunknownsecondargumentstart") + " " + CommandExecutor::getArgument(1) + "."; … … 355 355 else 356 356 { 357 // There is no classname - move on to C S_ParamPreparation358 } 359 } 360 case C S_ParamPreparation:357 // There is no classname - move on to CommandState::ParamPreparation 358 } 359 } 360 case CommandState::ParamPreparation: 361 361 { 362 362 if (CommandExecutor::getEvaluation().function_->getParamCount() == 0 || CommandExecutor::enoughArgumentsGiven(CommandExecutor::getEvaluation().function_)) 363 363 { 364 CommandExecutor::getEvaluation().state_ = C S_Finished;364 CommandExecutor::getEvaluation().state_ = CommandState::Finished; 365 365 return; 366 366 } … … 372 372 373 373 CommandExecutor::createListOfPossibleArguments(CommandExecutor::getLastArgument(), CommandExecutor::getEvaluation().function_, argumentNumber); 374 CommandExecutor::getEvaluation().state_ = C S_Params;374 CommandExecutor::getEvaluation().state_ = CommandState::Params; 375 375 376 376 if (CommandExecutor::getEvaluation().bCommandChanged_) … … 381 381 } 382 382 } 383 case C S_Params:383 case CommandState::Params: 384 384 { 385 385 if (CommandExecutor::getEvaluation().listOfPossibleArguments_.size() == 1) … … 388 388 CommandExecutor::getEvaluation().argument_ = (*CommandExecutor::getEvaluation().listOfPossibleArguments_.begin()).getString(); 389 389 CommandExecutor::getEvaluation().possibleArgument_ = (*CommandExecutor::getEvaluation().listOfPossibleArguments_.begin()).getString(); 390 CommandExecutor::getEvaluation().state_ = C S_ParamPreparation;390 CommandExecutor::getEvaluation().state_ = CommandState::ParamPreparation; 391 391 return; 392 392 } … … 394 394 { 395 395 // The user tries something new - we let him do 396 CommandExecutor::getEvaluation().state_ = C S_ParamPreparation;396 CommandExecutor::getEvaluation().state_ = CommandState::ParamPreparation; 397 397 CommandExecutor::getEvaluation().argument_ = CommandExecutor::getLastArgument(); 398 398 return; … … 409 409 CommandExecutor::getEvaluation().argument_ = CommandExecutor::getCommonBegin(CommandExecutor::getEvaluation().listOfPossibleArguments_); 410 410 CommandExecutor::getEvaluation().possibleArgument_ = CommandExecutor::getPossibleArgument(CommandExecutor::getLastArgument(), CommandExecutor::getEvaluation().function_, argumentNumber); 411 CommandExecutor::getEvaluation().state_ = C S_ParamPreparation;411 CommandExecutor::getEvaluation().state_ = CommandState::ParamPreparation; 412 412 return; 413 413 } 414 414 } 415 case C S_Finished:415 case CommandState::Finished: 416 416 { 417 417 // Nothing more to do 418 418 break; 419 419 } 420 case C S_Error:420 case CommandState::Error: 421 421 { 422 422 // Bad, very bad -
code/trunk/src/core/CommandLine.cc
r3196 r3280 29 29 #include "CommandLine.h" 30 30 31 #include <algorithm> 32 #include <sstream> 31 33 #include <boost/filesystem.hpp> 32 34 … … 34 36 #include "util/Debug.h" 35 37 #include "util/Exception.h" 36 #include "util/String .h"38 #include "util/StringUtils.h" 37 39 #include "util/SubString.h" 38 40 #include "Core.h" … … 40 42 namespace orxonox 41 43 { 42 SetCommandLine Argument(optionsFile, "start.ini").shortcut("o");44 SetCommandLineOnlyArgument(optionsFile, "start.ini").shortcut("o"); 43 45 44 46 /** … … 49 51 so that you can have simple command line switches. 50 52 */ 51 void CommandLineArgument::parse(const std::string& value) 52 { 53 if (value_.getType() == MT_bool) 53 void CommandLineArgument::parse(const std::string& value, bool bParsingFile) 54 { 55 if (bParsingFile && this->bCommandLineOnly_) 56 ThrowException(Argument, "Command line argument '" + getName() + "' is not allowed in files."); 57 if (value_.getType() == MT_Type::Bool) 54 58 { 55 59 // simulate command line switch … … 66 70 } 67 71 else 68 {69 72 ThrowException(Argument, "Could not read command line argument '" + getName() + "'."); 70 }71 73 } 72 74 else … … 126 128 Vector of space separated strings. 127 129 */ 128 void CommandLine::_parse(const std::vector<std::string>& arguments) 129 { 130 // why this? See bFirstTimeParse_ declaration. 131 if (bFirstTimeParse_) 132 { 133 // first shove all the shortcuts in a map 134 for (std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgs_.begin(); 135 it != cmdLineArgs_.end(); ++it) 136 { 137 OrxAssert(cmdLineArgsShortcut_.find(it->second->getShortcut()) == cmdLineArgsShortcut_.end(), 138 "Cannot have two command line shortcut with the same name."); 139 if (it->second->getShortcut() != "") 140 cmdLineArgsShortcut_[it->second->getShortcut()] = it->second; 141 } 142 bFirstTimeParse_ = false; 143 } 144 145 std::string name; 146 std::string shortcut; 147 std::string value; 148 for (unsigned int i = 0; i < arguments.size(); ++i) 149 { 150 if (arguments[i].size() != 0) 151 { 152 // sure not "" 153 if (arguments[i][0] == '-') 130 void CommandLine::_parse(const std::vector<std::string>& arguments, bool bParsingFile) 131 { 132 try 133 { 134 // why this? See bFirstTimeParse_ declaration. 135 if (bFirstTimeParse_) 136 { 137 // first shove all the shortcuts in a map 138 for (std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgs_.begin(); 139 it != cmdLineArgs_.end(); ++it) 154 140 { 155 // start with "-" 156 if (arguments[i].size() == 1) 141 OrxAssert(cmdLineArgsShortcut_.find(it->second->getShortcut()) == cmdLineArgsShortcut_.end(), 142 "Cannot have two command line shortcut with the same name."); 143 if (it->second->getShortcut() != "") 144 cmdLineArgsShortcut_[it->second->getShortcut()] = it->second; 145 } 146 bFirstTimeParse_ = false; 147 } 148 149 std::string name; 150 std::string shortcut; 151 std::string value; 152 for (unsigned int i = 0; i < arguments.size(); ++i) 153 { 154 if (arguments[i].size() != 0) 155 { 156 // sure not "" 157 if (arguments[i][0] == '-') 157 158 { 158 // argument[i] is "-", probably a minus sign 159 value += "- "; 160 } 161 else if (arguments[i][1] <= 57 && arguments[i][1] >= 48) 162 { 163 // negative number as a value 164 value += arguments[i] + " "; 159 // start with "-" 160 if (arguments[i].size() == 1) 161 { 162 // argument[i] is "-", probably a minus sign 163 value += "- "; 164 } 165 else if (arguments[i][1] <= 57 && arguments[i][1] >= 48) 166 { 167 // negative number as a value 168 value += arguments[i] + " "; 169 } 170 else 171 { 172 // can be shortcut or full name argument 173 174 // save old data first 175 value = removeTrailingWhitespaces(value); 176 if (name != "") 177 { 178 checkFullArgument(name, value, bParsingFile); 179 name = ""; 180 assert(shortcut == ""); 181 } 182 else if (shortcut != "") 183 { 184 checkShortcut(shortcut, value, bParsingFile); 185 shortcut = ""; 186 assert(name == ""); 187 } 188 189 if (arguments[i][1] == '-') 190 { 191 // full name argument with "--name" 192 name = arguments[i].substr(2); 193 } 194 else 195 { 196 // shortcut with "-s" 197 shortcut = arguments[i].substr(1); 198 } 199 200 // reset value string 201 value = ""; 202 } 165 203 } 166 204 else 167 205 { 168 // can be shortcut or full name argument 169 170 // save old data first 171 value = removeTrailingWhitespaces(value); 172 if (name != "") 206 // value string 207 208 if (name == "" && shortcut == "") 173 209 { 174 checkFullArgument(name, value); 175 name = ""; 176 assert(shortcut == ""); 210 ThrowException(Argument, "Expected \"-\" or \"-\" in command line arguments.\n"); 177 211 } 178 else if (shortcut != "") 179 { 180 checkShortcut(shortcut, value); 181 shortcut = ""; 182 assert(name == ""); 183 } 184 185 if (arguments[i][1] == '-') 186 { 187 // full name argument with "--name" 188 name = arguments[i].substr(2); 189 } 190 else 191 { 192 // shortcut with "-s" 193 shortcut = arguments[i].substr(1); 194 } 195 196 // reset value string 197 value = ""; 212 213 // Concatenate strings as long as there's no new argument by "-" or "--" 214 value += arguments[i] + ' '; 198 215 } 199 216 } 200 else 201 { 202 // value string 203 204 if (name == "" && shortcut == "") 205 { 206 ThrowException(Argument, "Expected \"-\" or \"-\" in command line arguments.\n"); 207 } 208 209 // Concatenate strings as long as there's no new argument by "-" or "--" 210 value += arguments[i] + ' '; 211 } 212 } 213 } 214 215 // parse last argument 216 value = removeTrailingWhitespaces(value); 217 if (name != "") 218 { 219 checkFullArgument(name, value); 220 assert(shortcut == ""); 221 } 222 else if (shortcut != "") 223 { 224 checkShortcut(shortcut, value); 225 assert(name == ""); 217 } 218 219 // parse last argument 220 value = removeTrailingWhitespaces(value); 221 if (name != "") 222 { 223 checkFullArgument(name, value, bParsingFile); 224 assert(shortcut == ""); 225 } 226 else if (shortcut != "") 227 { 228 checkShortcut(shortcut, value, bParsingFile); 229 assert(name == ""); 230 } 231 } 232 catch (const ArgumentException& ex) 233 { 234 COUT(0) << "Could not parse command line (including additional files): " << ex.what() << std::endl; 235 COUT(0) << CommandLine::getUsageInformation() << std::endl; 236 throw GeneralException(""); 226 237 } 227 238 } … … 235 246 String containing the value 236 247 */ 237 void CommandLine::checkFullArgument(const std::string& name, const std::string& value )248 void CommandLine::checkFullArgument(const std::string& name, const std::string& value, bool bParsingFile) 238 249 { 239 250 std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgs_.find(name); … … 241 252 ThrowException(Argument, "Command line argument '" + name + "' does not exist."); 242 253 243 it->second->parse(value );254 it->second->parse(value, bParsingFile); 244 255 } 245 256 … … 252 263 String containing the value 253 264 */ 254 void CommandLine::checkShortcut(const std::string& shortcut, const std::string& value )265 void CommandLine::checkShortcut(const std::string& shortcut, const std::string& value, bool bParsingFile) 255 266 { 256 267 std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgsShortcut_.find(shortcut); … … 258 269 ThrowException(Argument, "Command line shortcut '" + shortcut + "' does not exist."); 259 270 260 it->second->parse(value );271 it->second->parse(value, bParsingFile); 261 272 } 262 273 263 274 std::string CommandLine::getUsageInformation() 264 275 { 265 CommandLine* inst = &_getInstance(); 266 std::string infoStr; 267 for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst->cmdLineArgs_.begin(); 268 it != inst->cmdLineArgs_.end(); ++it) 269 { 270 infoStr += "[--" + it->second->getName() + " " + it->second->getInformation() + "] "; 271 } 272 return infoStr; 276 CommandLine& inst = _getInstance(); 277 std::ostringstream infoStr; 278 279 // determine maximum name size 280 size_t maxNameSize = 0; 281 for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin(); 282 it != inst.cmdLineArgs_.end(); ++it) 283 { 284 maxNameSize = std::max(it->second->getName().size(), maxNameSize); 285 } 286 287 infoStr << "Usage: orxonox [options]" << std::endl; 288 infoStr << "Available options:" << std::endl; 289 290 for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin(); 291 it != inst.cmdLineArgs_.end(); ++it) 292 { 293 if (it->second->getShortcut() != "") 294 infoStr << " [-" << it->second->getShortcut() << "] "; 295 else 296 infoStr << " "; 297 infoStr << "--" << it->second->getName() << " "; 298 if (it->second->getValue().getType() != MT_Type::Bool) 299 infoStr << "ARG "; 300 else 301 infoStr << " "; 302 // fill with the necessary amount of blanks 303 infoStr << std::string(maxNameSize - it->second->getName().size(), ' '); 304 infoStr << ": " << it->second->getInformation(); 305 infoStr << std::endl; 306 } 307 return infoStr.str(); 273 308 } 274 309 … … 295 330 /** 296 331 @brief 297 Parses both command line and start.ini for CommandLineArguments. 298 */ 299 void CommandLine::_parseAll(int argc, char** argv) 300 { 301 // parse command line first 332 Parses only the command line for CommandLineArguments. 333 */ 334 void CommandLine::_parseCommandLine(int argc, char** argv) 335 { 302 336 std::vector<std::string> args; 303 337 for (int i = 1; i < argc; ++i) 304 338 args.push_back(argv[i]); 305 this->_parse(args); 306 339 this->_parse(args, false); 340 } 341 342 /** 343 @brief 344 Parses start.ini (or the file specified with --optionsFile) for CommandLineArguments. 345 */ 346 void CommandLine::_parseFile() 347 { 307 348 std::string filename = CommandLine::getValue("optionsFile").getString(); 308 349 boost::filesystem::path filepath(Core::getConfigPath() / filename); … … 312 353 std::ifstream file; 313 354 file.open(filepath.string().c_str()); 314 args.clear();355 std::vector<std::string> args; 315 356 if (file) 316 357 { … … 332 373 } 333 374 334 try 335 { 336 _parse(args); 337 } 338 catch (orxonox::ArgumentException& ex) 339 { 340 COUT(1) << "An Exception occured while parsing " << filename << std::endl; 341 throw(ex); 342 } 375 _parse(args, true); 343 376 } 344 377 } -
code/trunk/src/core/CommandLine.h
r3196 r3280 38 38 #define SetCommandLineArgument(name, defaultValue) \ 39 39 orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \ 40 = orxonox::CommandLine::addArgument(#name, defaultValue) 40 = orxonox::CommandLine::addArgument(#name, defaultValue, false) 41 #define SetCommandLineOnlyArgument(name, defaultValue) \ 42 orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \ 43 = orxonox::CommandLine::addArgument(#name, defaultValue, true) 41 44 #define SetCommandLineSwitch(name) \ 42 45 orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \ 43 = orxonox::CommandLine::addArgument(#name, false) 46 = orxonox::CommandLine::addArgument(#name, false, false) 47 #define SetCommandLineOnlySwitch(name) \ 48 orxonox::CommandLineArgument& CmdArgumentDummyBoolVar##name \ 49 = orxonox::CommandLine::addArgument(#name, false, true) 44 50 45 51 … … 74 80 75 81 //! Returns the shortcut (example: "-p 22" for "--port 22") of the argument. 76 //! Evaluates to "" if nonethere is none.82 //! Evaluates to "" if there is none. 77 83 const std::string& getShortcut() const { return shortcut_; } 78 84 //! Sets the shortcut for the argument … … 93 99 private: 94 100 //! Constructor initialises both value_ and defaultValue_ with defaultValue. 95 CommandLineArgument(const std::string& name, const MultiType& defaultValue )101 CommandLineArgument(const std::string& name, const MultiType& defaultValue, bool bCommandLineOnly) 96 102 : bHasDefaultValue_(true) 97 103 , name_(name) 98 104 , value_(defaultValue) 99 105 , defaultValue_(defaultValue) 106 , bCommandLineOnly_(bCommandLineOnly) 100 107 { } 101 108 … … 105 112 106 113 //! Parses the value string of a command line argument. 107 void parse(const std::string& value );114 void parse(const std::string& value, bool bParsingFile); 108 115 109 116 //! Tells whether the value has been changed by the command line. … … 115 122 std::string usageInformation_; //!< Tells about the usage of this parameter 116 123 117 MultiType value_; //!< The actual value 118 MultiType defaultValue_; //!< Default value. Should not be changed. 124 MultiType value_; //!< The actual value 125 MultiType defaultValue_; //!< Default value. Should not be changed. 126 bool bCommandLineOnly_; //!< Whether you cannot specify the value in a text file 119 127 }; 120 128 … … 134 142 135 143 //! Parse redirection to internal member method. 136 static void parseAll(int argc, char** argv) { _getInstance()._parseAll(argc, argv); } 144 static void parseCommandLine(int argc, char** argv) { _getInstance()._parseCommandLine(argc, argv); } 145 static void parseFile() { _getInstance()._parseFile(); } 137 146 138 147 static std::string getUsageInformation(); … … 146 155 { return getArgument(name)->getValue(); } 147 156 template <class T> 148 static CommandLineArgument& addArgument(const std::string& name, T defaultValue );157 static CommandLineArgument& addArgument(const std::string& name, T defaultValue, bool bCommandLineOnly); 149 158 150 159 static bool existsArgument(const std::string& name) … … 165 174 static CommandLine& _getInstance(); 166 175 167 void _parseAll(int argc, char** argv); 168 void _parse(const std::vector<std::string>& arguments); 169 void checkFullArgument(const std::string& name, const std::string& value); 170 void checkShortcut(const std::string& shortcut, const std::string& value); 176 void _parseCommandLine(int argc, char** argv); 177 void _parseFile(); 178 void _parse(const std::vector<std::string>& arguments, bool bParsingFile); 179 void checkFullArgument(const std::string& name, const std::string& value, bool bParsingFile); 180 void checkShortcut(const std::string& shortcut, const std::string& value, bool bParsingFile); 171 181 172 182 /** … … 199 209 */ 200 210 template <class T> 201 CommandLineArgument& CommandLine::addArgument(const std::string& name, T defaultValue )211 CommandLineArgument& CommandLine::addArgument(const std::string& name, T defaultValue, bool bCommandLineOnly) 202 212 { 203 213 OrxAssert(!_getInstance().existsArgument(name), 204 214 "Cannot add a command line argument with name '" + name + "' twice."); 205 206 return *(_getInstance().cmdLineArgs_[name] = new CommandLineArgument(name, defaultValue)); 215 OrxAssert(MultiType(defaultValue).getType() != MT_Type::Bool || MultiType(defaultValue).getBool() != true, 216 "Boolean command line arguments with positive default values are not supported." << std::endl 217 << "Please use SetCommandLineSwitch and adjust your argument: " << name); 218 219 return *(_getInstance().cmdLineArgs_[name] = new CommandLineArgument(name, defaultValue, bCommandLineOnly)); 207 220 } 208 221 } -
code/trunk/src/core/ConfigFileManager.cc
r3198 r3280 33 33 #include "util/Convert.h" 34 34 #include "util/Math.h" 35 #include "util/String .h"35 #include "util/StringUtils.h" 36 36 #include "ConsoleCommand.h" 37 37 #include "ConfigValueContainer.h" … … 124 124 { 125 125 if (this->additionalComment_ == "" || this->additionalComment_.size() == 0) 126 return (this->name_ + "[" + getConvertedValue<unsigned int, std::string>(this->index_, "0") + "]" + "=" + this->value_);127 else 128 return (this->name_ + "[" + getConvertedValue<unsigned int, std::string>(this->index_, "0") + "]=" + this->value_ + " " + this->additionalComment_);126 return (this->name_ + "[" + multi_cast<std::string>(this->index_) + "]" + "=" + this->value_); 127 else 128 return (this->name_ + "[" + multi_cast<std::string>(this->index_) + "]=" + this->value_ + " " + this->additionalComment_); 129 129 } 130 130 -
code/trunk/src/core/ConfigValueContainer.cc
r3196 r3280 78 78 for (unsigned int i = 0; i < this->valueVector_.size(); i++) 79 79 { 80 ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, this->valueVector_[i], this->value_.isType(MT_ string));80 ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, this->valueVector_[i], this->value_.isType(MT_Type::String)); 81 81 this->defvalueStringVector_.push_back(this->valueVector_[i]); 82 82 } … … 109 109 if (this->tset(input)) 110 110 { 111 ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, input, this->value_.isType(MT_ string));111 ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, input, this->value_.isType(MT_Type::String)); 112 112 return true; 113 113 } … … 128 128 if (this->tset(index, input)) 129 129 { 130 ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, index, input, this->value_.isType(MT_ string));130 ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, index, input, this->value_.isType(MT_Type::String)); 131 131 return true; 132 132 } … … 228 228 this->valueVector_.erase(this->valueVector_.begin() + index); 229 229 for (unsigned int i = index; i < this->valueVector_.size(); i++) 230 ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, i, this->valueVector_[i], this->value_.isType(MT_ string));230 ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, i, this->valueVector_[i], this->value_.isType(MT_Type::String)); 231 231 ConfigFileManager::getInstance().deleteVectorEntries(this->type_, this->sectionname_, this->varname_, this->valueVector_.size()); 232 232 … … 264 264 { 265 265 if (!this->bIsVector_) 266 this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, this->defvalueString_, this->value_.isType(MT_ string));266 this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, this->defvalueString_, this->value_.isType(MT_Type::String)); 267 267 else 268 268 { … … 273 273 if (i < this->defvalueStringVector_.size()) 274 274 { 275 this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, this->defvalueStringVector_[i], this->value_.isType(MT_ string));275 this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, this->defvalueStringVector_[i], this->value_.isType(MT_Type::String)); 276 276 } 277 277 else 278 278 { 279 this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, MultiType(), this->value_.isType(MT_ string));279 this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, MultiType(), this->value_.isType(MT_Type::String)); 280 280 } 281 281 -
code/trunk/src/core/ConfigValueIncludes.h
r2171 r3280 52 52 if (!container##varname) \ 53 53 { \ 54 container##varname = new orxonox::ConfigValueContainer( ConfigFileType::Settings, identifier##varname, identifier##varname->getName(), #varname, defvalue, varname); \54 container##varname = new orxonox::ConfigValueContainer(type, identifier##varname, identifier##varname->getName(), #varname, defvalue, varname); \ 55 55 identifier##varname->addConfigValueContainer(#varname, container##varname); \ 56 56 } \ … … 70 70 if (!container##varname) \ 71 71 { \ 72 container##varname = new orxonox::ConfigValueContainer( ConfigFileType::Settings, identifier##varname, identifier##varname->getName(), #varname, defvalue); \72 container##varname = new orxonox::ConfigValueContainer(type, identifier##varname, identifier##varname->getName(), #varname, defvalue); \ 73 73 identifier##varname->addConfigValueContainer(#varname, container##varname); \ 74 74 } \ -
code/trunk/src/core/ConsoleCommand.h
r3196 r3280 71 71 namespace AccessLevel 72 72 { 73 enum Level73 enum Value 74 74 { 75 75 None, … … 106 106 { this->Executor::setDefaultValue(index, param); return (*this); } 107 107 108 inline ConsoleCommand& accessLevel(AccessLevel:: Levellevel)108 inline ConsoleCommand& accessLevel(AccessLevel::Value level) 109 109 { this->accessLevel_ = level; return (*this); } 110 inline AccessLevel:: LevelgetAccessLevel() const110 inline AccessLevel::Value getAccessLevel() const 111 111 { return this->accessLevel_; } 112 112 … … 130 130 } 131 131 132 inline ConsoleCommand& keybindMode(KeybindMode:: Enummode)132 inline ConsoleCommand& keybindMode(KeybindMode::Value mode) 133 133 { this->keybindMode_ = mode; return *this; } 134 inline KeybindMode:: EnumgetKeybindMode() const134 inline KeybindMode::Value getKeybindMode() const 135 135 { return this->keybindMode_; } 136 136 … … 141 141 142 142 private: 143 AccessLevel:: LevelaccessLevel_;143 AccessLevel::Value accessLevel_; 144 144 ArgumentCompleter* argumentCompleter_[5]; 145 145 ArgumentCompletionList argumentList_; 146 146 147 KeybindMode:: EnumkeybindMode_;147 KeybindMode::Value keybindMode_; 148 148 int inputConfiguredParam_; 149 149 }; -
code/trunk/src/core/Core.cc
r3214 r3280 77 77 namespace orxonox 78 78 { 79 //! Path to the parent directory of the ones above if program was installed with relativ pahts80 static boost::filesystem::path rootPath_g;81 static boost::filesystem::path executablePath_g; //!< Path to the executable82 static boost::filesystem::path mediaPath_g; //!< Path to the media file folder83 static boost::filesystem::path configPath_g; //!< Path to the config file folder84 static boost::filesystem::path logPath_g; //!< Path to the log file folder85 86 79 //! Static pointer to the singleton 87 80 Core* Core::singletonRef_s = 0; 88 81 89 SetCommandLineArgument(mediaPath, "").information("PATH"); 90 SetCommandLineArgument(writingPathSuffix, "").information("DIR"); 91 SetCommandLineArgument(settingsFile, "orxonox.ini"); 92 SetCommandLineArgument(limitToCPU, 0).information("0: off | #cpu"); 93 94 Core::Core() 95 { 96 RegisterRootObject(Core); 97 98 assert(Core::singletonRef_s == 0); 82 SetCommandLineArgument(mediaPath, "").information("Path to the media/data files"); 83 SetCommandLineOnlyArgument(writingPathSuffix, "").information("Additional subfolder for config and log files"); 84 SetCommandLineArgument(settingsFile, "orxonox.ini").information("THE configuration file"); 85 #ifdef ORXONOX_PLATFORM_WINDOWS 86 SetCommandLineArgument(limitToCPU, 0).information("Limits the program to one cpu/core (1, 2, 3, etc.). 0 turns it off (default)"); 87 #endif 88 89 /** 90 @brief 91 Helper class for the Core singleton: we cannot derive 92 Core from OrxonoxClass because we need to handle the Identifier 93 destruction in the Core destructor. 94 */ 95 class CoreConfiguration : public OrxonoxClass 96 { 97 public: 98 CoreConfiguration() 99 { 100 } 101 102 void initialise() 103 { 104 RegisterRootObject(CoreConfiguration); 105 this->setConfigValues(); 106 107 // Possible media path override by the command line 108 if (!CommandLine::getArgument("mediaPath")->hasDefaultValue()) 109 tsetMediaPath(CommandLine::getValue("mediaPath")); 110 } 111 112 /** 113 @brief Function to collect the SetConfigValue-macro calls. 114 */ 115 void setConfigValues() 116 { 117 #ifdef NDEBUG 118 const unsigned int defaultLevelConsole = 1; 119 const unsigned int defaultLevelLogfile = 3; 120 const unsigned int defaultLevelShell = 1; 121 #else 122 const unsigned int defaultLevelConsole = 3; 123 const unsigned int defaultLevelLogfile = 4; 124 const unsigned int defaultLevelShell = 3; 125 #endif 126 SetConfigValue(softDebugLevelConsole_, defaultLevelConsole) 127 .description("The maximal level of debug output shown in the console") 128 .callback(this, &CoreConfiguration::debugLevelChanged); 129 SetConfigValue(softDebugLevelLogfile_, defaultLevelLogfile) 130 .description("The maximal level of debug output shown in the logfile") 131 .callback(this, &CoreConfiguration::debugLevelChanged); 132 SetConfigValue(softDebugLevelShell_, defaultLevelShell) 133 .description("The maximal level of debug output shown in the ingame shell") 134 .callback(this, &CoreConfiguration::debugLevelChanged); 135 136 SetConfigValue(language_, Language::getLanguage().defaultLanguage_) 137 .description("The language of the ingame text") 138 .callback(this, &CoreConfiguration::languageChanged); 139 SetConfigValue(bInitializeRandomNumberGenerator_, true) 140 .description("If true, all random actions are different each time you start the game") 141 .callback(this, &CoreConfiguration::initializeRandomNumberGenerator); 142 143 SetConfigValue(mediaPathString_, mediaPath_.string()) 144 .description("Relative path to the game data.") 145 .callback(this, &CoreConfiguration::mediaPathChanged); 146 } 147 148 /** 149 @brief Callback function if the debug level has changed. 150 */ 151 void debugLevelChanged() 152 { 153 // softDebugLevel_ is the maximum of the 3 variables 154 this->softDebugLevel_ = this->softDebugLevelConsole_; 155 if (this->softDebugLevelLogfile_ > this->softDebugLevel_) 156 this->softDebugLevel_ = this->softDebugLevelLogfile_; 157 if (this->softDebugLevelShell_ > this->softDebugLevel_) 158 this->softDebugLevel_ = this->softDebugLevelShell_; 159 160 OutputHandler::setSoftDebugLevel(OutputHandler::LD_All, this->softDebugLevel_); 161 OutputHandler::setSoftDebugLevel(OutputHandler::LD_Console, this->softDebugLevelConsole_); 162 OutputHandler::setSoftDebugLevel(OutputHandler::LD_Logfile, this->softDebugLevelLogfile_); 163 OutputHandler::setSoftDebugLevel(OutputHandler::LD_Shell, this->softDebugLevelShell_); 164 } 165 166 /** 167 @brief Callback function if the language has changed. 168 */ 169 void languageChanged() 170 { 171 // Read the translation file after the language was configured 172 Language::getLanguage().readTranslatedLanguageFile(); 173 } 174 175 /** 176 @brief 177 Callback function if the media path has changed. 178 */ 179 void mediaPathChanged() 180 { 181 mediaPath_ = boost::filesystem::path(this->mediaPathString_); 182 } 183 184 /** 185 @brief Sets the language in the config-file back to the default. 186 */ 187 void resetLanguage() 188 { 189 ResetConfigValue(language_); 190 } 191 192 /** 193 @brief 194 Temporary sets the media path 195 @param path 196 The new media path 197 */ 198 void tsetMediaPath(const std::string& path) 199 { 200 ModifyConfigValue(mediaPathString_, tset, path); 201 } 202 203 void initializeRandomNumberGenerator() 204 { 205 static bool bInitialized = false; 206 if (!bInitialized && this->bInitializeRandomNumberGenerator_) 207 { 208 srand(static_cast<unsigned int>(time(0))); 209 rand(); 210 bInitialized = true; 211 } 212 } 213 214 int softDebugLevel_; //!< The debug level 215 int softDebugLevelConsole_; //!< The debug level for the console 216 int softDebugLevelLogfile_; //!< The debug level for the logfile 217 int softDebugLevelShell_; //!< The debug level for the ingame shell 218 std::string language_; //!< The language 219 bool bInitializeRandomNumberGenerator_; //!< If true, srand(time(0)) is called 220 std::string mediaPathString_; //!< Path to the data/media file folder as string 221 222 //! Path to the parent directory of the ones above if program was installed with relativ pahts 223 boost::filesystem::path rootPath_; 224 boost::filesystem::path executablePath_; //!< Path to the executable 225 boost::filesystem::path mediaPath_; //!< Path to the media file folder 226 boost::filesystem::path configPath_; //!< Path to the config file folder 227 boost::filesystem::path logPath_; //!< Path to the log file folder 228 }; 229 230 231 Core::Core(int argc, char** argv) 232 { 233 if (singletonRef_s != 0) 234 { 235 COUT(0) << "Error: The Core singleton cannot be recreated! Shutting down." << std::endl; 236 abort(); 237 } 99 238 Core::singletonRef_s = this; 100 } 101 102 void Core::initialise(int argc, char** argv) 103 { 104 // Parse command line arguments fist 105 try 106 { 107 CommandLine::parseAll(argc, argv); 108 } 109 catch (ArgumentException& ex) 110 { 111 COUT(1) << ex.what() << std::endl; 112 COUT(0) << "Usage:" << std::endl << "orxonox " << CommandLine::getUsageInformation() << std::endl; 113 } 114 239 240 // We need the variables very soon. But don't configure them yet! 241 this->configuration_ = new CoreConfiguration(); 242 243 // Parse command line arguments first 244 CommandLine::parseCommandLine(argc, argv); 245 246 // Determine and set the location of the executable 247 setExecutablePath(); 248 249 // Determine whether we have an installed or a binary dir run 250 // The latter occurs when simply running from the build directory 251 checkDevBuild(); 252 253 // Make sure the directories we write in exist or else make them 254 createDirectories(); 255 256 // create a signal handler (only active for linux) 257 // This call is placed as soon as possible, but after the directories are set 258 this->signalHandler_ = new SignalHandler(); 259 this->signalHandler_->doCatch(configuration_->executablePath_.string(), Core::getLogPathString() + "orxonox_crash.log"); 260 261 // Set the correct log path. Before this call, /tmp (Unix) or %TEMP% was used 262 OutputHandler::getOutStream().setLogPath(Core::getLogPathString()); 263 264 // Parse additional options file now that we know its path 265 CommandLine::parseFile(); 266 267 #ifdef ORXONOX_PLATFORM_WINDOWS 115 268 // limit the main thread to the first core so that QueryPerformanceCounter doesn't jump 116 269 // do this after ogre has initialised. Somehow Ogre changes the settings again (not through … … 118 271 int limitToCPU = CommandLine::getValue("limitToCPU"); 119 272 if (limitToCPU > 0) 120 setThreadAffinity((unsigned int)limitToCPU); 121 122 // Determine and set the location of the executable 123 setExecutablePath(); 124 125 // Determine whether we have an installed or a binary dir run 126 // The latter occurs when simply running from the build directory 127 checkDevBuild(); 128 129 // Make sure the directories we write in exist or else make them 130 createDirectories(); 131 132 // create a signal handler (only active for linux) 133 // This call is placed as soon as possible, but after the directories are set 134 this->signalHandler_ = new SignalHandler(); 135 this->signalHandler_->doCatch(executablePath_g.string(), Core::getLogPathString() + "orxonox_crash.log"); 136 137 // Set the correct log path. Before this call, /tmp (Unix) or %TEMP% was used 138 OutputHandler::getOutStream().setLogPath(Core::getLogPathString()); 273 setThreadAffinity(static_cast<unsigned int>(limitToCPU)); 274 #endif 139 275 140 276 // Manage ini files and set the default settings file (usually orxonox.ini) … … 143 279 CommandLine::getValue("settingsFile").getString()); 144 280 281 // Required as well for the config values 145 282 this->languageInstance_ = new Language(); 146 283 147 284 // Do this soon after the ConfigFileManager has been created to open up the 148 285 // possibility to configure everything below here 149 this->setConfigValues(); 150 151 // Possible media path override by the command line 152 if (!CommandLine::getArgument("mediaPath")->hasDefaultValue()) 153 { 154 //std::string mediaPath = CommandLine::getValue("mediaPath"); 155 Core::tsetMediaPath(CommandLine::getValue("mediaPath")); 156 } 286 this->configuration_->initialise(); 157 287 158 288 // Create the lua interface … … 168 298 // creates the class hierarchy for all classes with factories 169 299 Factory::createClassHierarchy(); 170 171 this->loaded_ = true;172 300 } 173 301 … … 177 305 Core::~Core() 178 306 { 179 this->loaded_ = false;180 181 307 delete this->shell_; 182 308 delete this->tclThreadManager_; 183 309 delete this->tclBind_; 184 310 delete this->luaBind_; 311 delete this->configuration_; 185 312 delete this->languageInstance_; 186 313 delete this->configFileManager_; … … 190 317 // Also delete external console command that don't belong to an Identifier 191 318 CommandExecutor::destroyExternalCommands(); 192 193 assert(Core::singletonRef_s);194 Core::singletonRef_s = 0; 319 // Clean up class hierarchy stuff (identifiers, XMLPort, configValues, consoleCommand) 320 Identifier::destroyAllIdentifiers(); 321 195 322 delete this->signalHandler_; 196 } 197 198 /** 199 @brief Function to collect the SetConfigValue-macro calls. 200 */ 201 void Core::setConfigValues() 202 { 203 #ifdef NDEBUG 204 const unsigned int defaultLevelConsole = 1; 205 const unsigned int defaultLevelLogfile = 3; 206 const unsigned int defaultLevelShell = 1; 207 #else 208 const unsigned int defaultLevelConsole = 3; 209 const unsigned int defaultLevelLogfile = 4; 210 const unsigned int defaultLevelShell = 3; 211 #endif 212 SetConfigValue(softDebugLevelConsole_, defaultLevelConsole) 213 .description("The maximal level of debug output shown in the console").callback(this, &Core::debugLevelChanged); 214 SetConfigValue(softDebugLevelLogfile_, defaultLevelLogfile) 215 .description("The maximal level of debug output shown in the logfile").callback(this, &Core::debugLevelChanged); 216 SetConfigValue(softDebugLevelShell_, defaultLevelShell) 217 .description("The maximal level of debug output shown in the ingame shell").callback(this, &Core::debugLevelChanged); 218 219 SetConfigValue(language_, Language::getLanguage().defaultLanguage_).description("The language of the ingame text").callback(this, &Core::languageChanged); 220 SetConfigValue(bInitializeRandomNumberGenerator_, true).description("If true, all random actions are different each time you start the game").callback(this, &Core::initializeRandomNumberGenerator); 221 222 SetConfigValue(mediaPathString_, mediaPath_g.string()) 223 .description("Relative path to the game data.").callback(this, &Core::mediaPathChanged); 224 } 225 226 /** 227 @brief Callback function if the debug level has changed. 228 */ 229 void Core::debugLevelChanged() 230 { 231 // softDebugLevel_ is the maximum of the 3 variables 232 this->softDebugLevel_ = this->softDebugLevelConsole_; 233 if (this->softDebugLevelLogfile_ > this->softDebugLevel_) 234 this->softDebugLevel_ = this->softDebugLevelLogfile_; 235 if (this->softDebugLevelShell_ > this->softDebugLevel_) 236 this->softDebugLevel_ = this->softDebugLevelShell_; 237 238 OutputHandler::setSoftDebugLevel(OutputHandler::LD_All, this->softDebugLevel_); 239 OutputHandler::setSoftDebugLevel(OutputHandler::LD_Console, this->softDebugLevelConsole_); 240 OutputHandler::setSoftDebugLevel(OutputHandler::LD_Logfile, this->softDebugLevelLogfile_); 241 OutputHandler::setSoftDebugLevel(OutputHandler::LD_Shell, this->softDebugLevelShell_); 242 } 243 244 /** 245 @brief Callback function if the language has changed. 246 */ 247 void Core::languageChanged() 248 { 249 // Read the translation file after the language was configured 250 Language::getLanguage().readTranslatedLanguageFile(); 251 } 252 253 /** 254 @brief 255 Callback function if the media path has changed. 256 */ 257 void Core::mediaPathChanged() 258 { 259 mediaPath_g = boost::filesystem::path(this->mediaPathString_); 260 } 261 262 /** 263 @brief Returns the softDebugLevel for the given device (returns a default-value if the class ist right about to be created). 323 324 // Don't assign singletonRef_s with NULL! Recreation is not supported 325 } 326 327 /** 328 @brief Returns the softDebugLevel for the given device (returns a default-value if the class is right about to be created). 264 329 @param device The device 265 330 @return The softDebugLevel 266 331 */ 267 int Core::getSoftDebugLevel(OutputHandler::OutputDevice device)332 /*static*/ int Core::getSoftDebugLevel(OutputHandler::OutputDevice device) 268 333 { 269 334 switch (device) 270 335 { 271 336 case OutputHandler::LD_All: 272 return Core::getInstance(). softDebugLevel_;337 return Core::getInstance().configuration_->softDebugLevel_; 273 338 case OutputHandler::LD_Console: 274 return Core::getInstance(). softDebugLevelConsole_;339 return Core::getInstance().configuration_->softDebugLevelConsole_; 275 340 case OutputHandler::LD_Logfile: 276 return Core::getInstance(). softDebugLevelLogfile_;341 return Core::getInstance().configuration_->softDebugLevelLogfile_; 277 342 case OutputHandler::LD_Shell: 278 return Core::getInstance(). softDebugLevelShell_;343 return Core::getInstance().configuration_->softDebugLevelShell_; 279 344 default: 280 345 assert(0); … … 288 353 @param level The level 289 354 */ 290 void Core::setSoftDebugLevel(OutputHandler::OutputDevice device, int level)291 355 /*static*/ void Core::setSoftDebugLevel(OutputHandler::OutputDevice device, int level) 356 { 292 357 if (device == OutputHandler::LD_All) 293 Core::getInstance(). softDebugLevel_ = level;358 Core::getInstance().configuration_->softDebugLevel_ = level; 294 359 else if (device == OutputHandler::LD_Console) 295 Core::getInstance(). softDebugLevelConsole_ = level;360 Core::getInstance().configuration_->softDebugLevelConsole_ = level; 296 361 else if (device == OutputHandler::LD_Logfile) 297 Core::getInstance(). softDebugLevelLogfile_ = level;362 Core::getInstance().configuration_->softDebugLevelLogfile_ = level; 298 363 else if (device == OutputHandler::LD_Shell) 299 Core::getInstance(). softDebugLevelShell_ = level;364 Core::getInstance().configuration_->softDebugLevelShell_ = level; 300 365 301 366 OutputHandler::setSoftDebugLevel(device, level); 302 367 } 303 368 304 369 /** 305 370 @brief Returns the configured language. 306 371 */ 307 const std::string& Core::getLanguage()308 { 309 return Core::getInstance(). language_;372 /*static*/ const std::string& Core::getLanguage() 373 { 374 return Core::getInstance().configuration_->language_; 310 375 } 311 376 … … 313 378 @brief Sets the language in the config-file back to the default. 314 379 */ 315 void Core::resetLanguage() 316 { 317 Core::getInstance().resetLanguageIntern(); 318 } 319 320 /** 321 @brief Sets the language in the config-file back to the default. 322 */ 323 void Core::resetLanguageIntern() 324 { 325 ResetConfigValue(language_); 326 } 327 328 /** 329 @brief 330 Temporary sets the media path 331 @param path 332 The new media path 333 */ 334 void Core::_tsetMediaPath(const std::string& path) 335 { 336 ModifyConfigValue(mediaPathString_, tset, path); 380 /*static*/ void Core::resetLanguage() 381 { 382 Core::getInstance().configuration_->resetLanguage(); 383 } 384 385 /*static*/ void Core::tsetMediaPath(const std::string& path) 386 { 387 getInstance().configuration_->tsetMediaPath(path); 337 388 } 338 389 339 390 /*static*/ const boost::filesystem::path& Core::getMediaPath() 340 391 { 341 return mediaPath_g;392 return getInstance().configuration_->mediaPath_; 342 393 } 343 394 /*static*/ std::string Core::getMediaPathString() 344 395 { 345 return mediaPath_g.string() + '/';396 return getInstance().configuration_->mediaPath_.string() + '/'; 346 397 } 347 398 348 399 /*static*/ const boost::filesystem::path& Core::getConfigPath() 349 400 { 350 return configPath_g;401 return getInstance().configuration_->configPath_; 351 402 } 352 403 /*static*/ std::string Core::getConfigPathString() 353 404 { 354 return configPath_g.string() + '/';405 return getInstance().configuration_->configPath_.string() + '/'; 355 406 } 356 407 357 408 /*static*/ const boost::filesystem::path& Core::getLogPath() 358 409 { 359 return logPath_g;410 return getInstance().configuration_->logPath_; 360 411 } 361 412 /*static*/ std::string Core::getLogPathString() 362 413 { 363 return logPath_g.string() + '/'; 364 } 365 366 void Core::initializeRandomNumberGenerator() 367 { 368 static bool bInitialized = false; 369 if (!bInitialized && this->bInitializeRandomNumberGenerator_) 370 { 371 srand(static_cast<unsigned int>(time(0))); 372 rand(); 373 bInitialized = true; 374 } 375 } 376 414 return getInstance().configuration_->logPath_.string() + '/'; 415 } 377 416 378 417 /** … … 388 427 void Core::setThreadAffinity(int limitToCPU) 389 428 { 429 #ifdef ORXONOX_PLATFORM_WINDOWS 430 390 431 if (limitToCPU <= 0) 391 432 return; 392 433 393 #ifdef ORXONOX_PLATFORM_WINDOWS394 434 unsigned int coreNr = limitToCPU - 1; 395 435 // Get the current process core mask … … 465 505 #endif 466 506 467 executablePath_g= boost::filesystem::path(buffer);507 configuration_->executablePath_ = boost::filesystem::path(buffer); 468 508 #ifndef ORXONOX_PLATFORM_APPLE 469 executablePath_g = executablePath_g.branch_path(); // remove executable name509 configuration_->executablePath_ = configuration_->executablePath_.branch_path(); // remove executable name 470 510 #endif 471 511 } … … 481 521 void Core::checkDevBuild() 482 522 { 483 if (boost::filesystem::exists( executablePath_g/ "orxonox_dev_build.keep_me"))523 if (boost::filesystem::exists(configuration_->executablePath_ / "orxonox_dev_build.keep_me")) 484 524 { 485 525 COUT(1) << "Running from the build tree." << std::endl; 486 526 Core::isDevBuild_ = true; 487 mediaPath_g= ORXONOX_MEDIA_DEV_PATH;488 config Path_g= ORXONOX_CONFIG_DEV_PATH;489 logPath_g= ORXONOX_LOG_DEV_PATH;527 configuration_->mediaPath_ = ORXONOX_MEDIA_DEV_PATH; 528 configuration_->configPath_ = ORXONOX_CONFIG_DEV_PATH; 529 configuration_->logPath_ = ORXONOX_LOG_DEV_PATH; 490 530 } 491 531 else … … 494 534 // Also set the root path 495 535 boost::filesystem::path relativeExecutablePath(ORXONOX_RUNTIME_INSTALL_PATH); 496 rootPath_g = executablePath_g; 497 while (!boost::filesystem::equivalent(rootPath_g / relativeExecutablePath, executablePath_g) && !rootPath_g.empty()) 498 rootPath_g = rootPath_g.branch_path(); 499 if (rootPath_g.empty()) 536 configuration_->rootPath_ = configuration_->executablePath_; 537 while (!boost::filesystem::equivalent(configuration_->rootPath_ / relativeExecutablePath, configuration_->executablePath_) 538 && !configuration_->rootPath_.empty()) 539 configuration_->rootPath_ = configuration_->rootPath_.branch_path(); 540 if (configuration_->rootPath_.empty()) 500 541 ThrowException(General, "Could not derive a root directory. Might the binary installation directory contain '..' when taken relative to the installation prefix path?"); 501 542 502 543 // Using paths relative to the install prefix, complete them 503 mediaPath_g = rootPath_g/ ORXONOX_MEDIA_INSTALL_PATH;504 config Path_g = rootPath_g/ ORXONOX_CONFIG_INSTALL_PATH;505 logPath_g = rootPath_g/ ORXONOX_LOG_INSTALL_PATH;544 configuration_->mediaPath_ = configuration_->rootPath_ / ORXONOX_MEDIA_INSTALL_PATH; 545 configuration_->configPath_ = configuration_->rootPath_ / ORXONOX_CONFIG_INSTALL_PATH; 546 configuration_->logPath_ = configuration_->rootPath_ / ORXONOX_LOG_INSTALL_PATH; 506 547 #else 507 548 // There is no root path, so don't set it at all 508 549 509 mediaPath_g= ORXONOX_MEDIA_INSTALL_PATH;550 configuration_->mediaPath_ = ORXONOX_MEDIA_INSTALL_PATH; 510 551 511 552 // Get user directory … … 520 561 userDataPath /= ".orxonox"; 521 562 522 config Path_g= userDataPath / ORXONOX_CONFIG_INSTALL_PATH;523 logPath_g= userDataPath / ORXONOX_LOG_INSTALL_PATH;563 configuration_->configPath_ = userDataPath / ORXONOX_CONFIG_INSTALL_PATH; 564 configuration_->logPath_ = userDataPath / ORXONOX_LOG_INSTALL_PATH; 524 565 #endif 525 566 } … … 529 570 { 530 571 std::string directory(CommandLine::getValue("writingPathSuffix").getString()); 531 config Path_g = configPath_g/ directory;532 logPath_g = logPath_g/ directory;572 configuration_->configPath_ = configuration_->configPath_ / directory; 573 configuration_->logPath_ = configuration_->logPath_ / directory; 533 574 } 534 575 } … … 544 585 { 545 586 std::vector<std::pair<boost::filesystem::path, std::string> > directories; 546 directories.push_back(std::make_pair(boost::filesystem::path(config Path_g), "config"));547 directories.push_back(std::make_pair(boost::filesystem::path( logPath_g), "log"));587 directories.push_back(std::make_pair(boost::filesystem::path(configuration_->configPath_), "config")); 588 directories.push_back(std::make_pair(boost::filesystem::path(configuration_->logPath_), "log")); 548 589 549 590 for (std::vector<std::pair<boost::filesystem::path, std::string> >::iterator it = directories.begin(); -
code/trunk/src/core/Core.h
r3196 r3280 43 43 44 44 #include <cassert> 45 #include "OrxonoxClass.h"46 45 #include "util/OutputHandler.h" 47 46 48 47 namespace orxonox 49 48 { 49 class CoreConfiguration; 50 50 51 /** 51 52 @brief … … 55 56 It determines those by the use of platform specific functions. 56 57 */ 57 class _CoreExport Core : public OrxonoxClass58 class _CoreExport Core 58 59 { 59 60 public: … … 65 66 GeneralException 66 67 */ 67 Core( );68 Core(int argc, char** argv); 68 69 ~Core(); 69 70 70 void initialise(int argc, char** argv);71 71 void setConfigValues(); 72 72 … … 80 80 static void resetLanguage(); 81 81 82 static void tsetMediaPath(const std::string& path) 83 { assert(singletonRef_s); singletonRef_s->_tsetMediaPath(path); } 82 static void tsetMediaPath(const std::string& path); 84 83 //! Returns the path to the config files as boost::filesystem::path 85 84 static const boost::filesystem::path& getMediaPath(); … … 103 102 void setThreadAffinity(int limitToCPU); 104 103 105 void resetLanguageIntern();106 void initializeRandomNumberGenerator();107 void debugLevelChanged();108 void languageChanged();109 void mediaPathChanged();110 void _tsetMediaPath(const std::string& path);111 112 104 // Singletons 113 105 ConfigFileManager* configFileManager_; … … 119 111 TclThreadManager* tclThreadManager_; 120 112 121 int softDebugLevel_; //!< The debug level122 int softDebugLevelConsole_; //!< The debug level for the console123 int softDebugLevelLogfile_; //!< The debug level for the logfile124 int softDebugLevelShell_; //!< The debug level for the ingame shell125 std::string language_; //!< The language126 bool bInitializeRandomNumberGenerator_; //!< If true, srand(time(0)) is called127 std::string mediaPathString_; //!< Path to the data/media file folder as string128 113 bool isDevBuild_; //!< True for builds in the build directory (not installed) 129 bool loaded_; //!< Only true if constructor was interrupted114 CoreConfiguration* configuration_; 130 115 131 116 static Core* singletonRef_s; -
code/trunk/src/core/CorePrereqs.h
r3196 r3280 74 74 namespace KeybindMode 75 75 { 76 enum Enum76 enum Value 77 77 { 78 78 OnPress, … … 165 165 // game states 166 166 class Game; 167 struct GameStateConstrParams; 167 168 class GameState; 168 169 struct GameStateTreeNode; -
code/trunk/src/core/Executor.cc
r3196 r3280 99 99 100 100 // assign all given arguments to the multitypes 101 for (unsigned int i = 0; i < min(tokens.size(), (unsigned int)MAX_FUNCTOR_ARGUMENTS); i++)101 for (unsigned int i = 0; i < std::min(tokens.size(), (unsigned int)MAX_FUNCTOR_ARGUMENTS); i++) 102 102 param[i] = tokens[i]; 103 103 104 104 // fill the remaining multitypes with default values 105 for (unsigned int i = tokens.size(); i < min(paramCount, (unsigned int)MAX_FUNCTOR_ARGUMENTS); i++)105 for (unsigned int i = tokens.size(); i < std::min(paramCount, (unsigned int)MAX_FUNCTOR_ARGUMENTS); i++) 106 106 param[i] = this->defaultValue_[i]; 107 107 108 108 // evaluate the param types through the functor 109 for (unsigned int i = 0; i < min(paramCount, (unsigned int)MAX_FUNCTOR_ARGUMENTS); i++)109 for (unsigned int i = 0; i < std::min(paramCount, (unsigned int)MAX_FUNCTOR_ARGUMENTS); i++) 110 110 this->functor_->evaluateParam(i, param[i]); 111 111 -
code/trunk/src/core/Executor.h
r3196 r3280 33 33 #include "CorePrereqs.h" 34 34 35 #include <algorithm> 36 #include <string> 37 35 38 #include "util/Debug.h" 36 39 #include "util/Math.h" 37 #include "util/String .h"40 #include "util/StringUtils.h" 38 41 #include "util/SubString.h" 39 42 #include "Functor.h" … … 101 104 COUT(5) << tokens[i]; \ 102 105 } \ 103 COUT(5) << ") and " << max((int)paramCount - (int)tokens.size(), 0) << " default values ("; \106 COUT(5) << ") and " << std::max((int)paramCount - (int)tokens.size(), 0) << " default values ("; \ 104 107 for (unsigned int i = tokens.size(); i < paramCount; i++) \ 105 108 { \ … … 175 178 inline bool hasReturnvalue() const 176 179 { return this->functor_->hasReturnvalue(); } 177 inline FunctionType getType() const180 inline FunctionType::Value getType() const 178 181 { return this->functor_->getType(); } 179 182 inline const MultiType& getReturnvalue() const … … 201 204 return this->defaultValue_[index]; 202 205 203 return MT_ null;206 return MT_Type::Null; 204 207 } 205 208 -
code/trunk/src/core/Functor.h
r3196 r3280 35 35 #include "util/Debug.h" 36 36 #include "util/MultiType.h" 37 #include "util/String .h"37 #include "util/StringUtils.h" 38 38 39 39 namespace orxonox … … 41 41 const unsigned int MAX_FUNCTOR_ARGUMENTS = 5; 42 42 43 enumFunctionType43 namespace FunctionType 44 44 { 45 FT_MEMBER, 46 FT_CONSTMEMBER, 47 FT_STATIC 48 }; 45 enum Value 46 { 47 Member, 48 ConstMember, 49 Static 50 }; 51 } 49 52 50 53 … … 98 101 virtual ~Functor() {} 99 102 100 virtual void operator()(const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) = 0;103 virtual void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0; 101 104 102 105 inline unsigned int getParamCount() const { return this->numParams_; } 103 106 inline bool hasReturnvalue() const { return this->hasReturnValue_; } 104 inline FunctionType getType() const { return this->type_; }107 inline FunctionType::Value getType() const { return this->type_; } 105 108 inline const MultiType& getReturnvalue() const { return this->returnedValue_; } 106 109 … … 113 116 unsigned int numParams_; 114 117 bool hasReturnValue_; 115 FunctionType type_;118 FunctionType::Value type_; 116 119 MultiType returnedValue_; 117 120 … … 124 127 public: 125 128 virtual ~FunctorStatic() {} 126 virtual void operator()(const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) = 0;129 virtual void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0; 127 130 }; 128 131 … … 139 142 virtual ~FunctorMember() {} 140 143 141 virtual void operator()(T* object, const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) = 0;142 virtual void operator()(const T* object, const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) = 0;143 144 virtual void operator()(const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null)144 virtual void operator()(T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0; 145 virtual void operator()(const T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0; 146 147 virtual void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) 145 148 { 146 149 if (this->bConstObject_) … … 322 325 this->numParams_ = numparams; \ 323 326 this->hasReturnValue_ = returnvalue; \ 324 this->type_ = F T_STATIC; \327 this->type_ = FunctionType::Static; \ 325 328 this->functionPointer_ = functionPointer; \ 326 329 \ … … 329 332 } \ 330 333 \ 331 void operator()(const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) \334 void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \ 332 335 { \ 333 336 FUNCTOR_STORE_RETURNVALUE(returnvalue, (*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \ … … 363 366 this->numParams_ = numparams; \ 364 367 this->hasReturnValue_ = returnvalue; \ 365 this->type_ = F T_MEMBER; \368 this->type_ = FunctionType::Member; \ 366 369 this->functionPointer_ = functionPointer; \ 367 370 } \ 368 371 \ 369 void operator()(T* object, const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) \372 void operator()(T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \ 370 373 { \ 371 374 FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \ 372 375 } \ 373 376 \ 374 void operator()(const T* object, const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) \377 void operator()(const T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \ 375 378 { \ 376 379 COUT(1) << "An error occurred in Functor.h:" << std::endl; \ … … 396 399 this->numParams_ = numparams; \ 397 400 this->hasReturnValue_ = returnvalue; \ 398 this->type_ = F T_CONSTMEMBER; \401 this->type_ = FunctionType::ConstMember; \ 399 402 this->functionPointer_ = functionPointer; \ 400 403 } \ 401 404 \ 402 void operator()(T* object, const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) \405 void operator()(T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \ 403 406 { \ 404 407 FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \ 405 408 } \ 406 409 \ 407 void operator()(const T* object, const MultiType& param1 = MT_ null, const MultiType& param2 = MT_null, const MultiType& param3 = MT_null, const MultiType& param4 = MT_null, const MultiType& param5 = MT_null) \410 void operator()(const T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \ 408 411 { \ 409 412 FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \ -
code/trunk/src/core/Game.cc
r3196 r3280 58 58 SetConsoleCommandShortcutExternAlias(stop_game, "exit"); 59 59 60 struct _CoreExport GameStateTreeNode 60 std::map<std::string, Game::GameStateInfo> Game::gameStateDeclarations_s; 61 Game* Game::singletonRef_s = 0; 62 63 64 /** 65 @brief 66 Represents one node of the game state tree. 67 */ 68 struct GameStateTreeNode 61 69 { 62 70 GameState* state_; … … 65 73 }; 66 74 67 std::map<std::string, GameState*> Game::allStates_s; 68 Game* Game::singletonRef_s = 0; 75 76 /** 77 @brief 78 Another helper class for the Game singleton: we cannot derive 79 Game from OrxonoxClass because we need to handle the Identifier 80 destruction in the Core destructor. 81 */ 82 class GameConfiguration : public OrxonoxClass 83 { 84 public: 85 GameConfiguration() 86 { 87 RegisterRootObject(GameConfiguration); 88 this->setConfigValues(); 89 } 90 91 void setConfigValues() 92 { 93 SetConfigValue(statisticsRefreshCycle_, 250000) 94 .description("Sets the time in microseconds interval at which average fps, etc. get updated."); 95 SetConfigValue(statisticsAvgLength_, 1000000) 96 .description("Sets the time in microseconds interval at which average fps, etc. gets calculated."); 97 } 98 99 unsigned int statisticsRefreshCycle_; 100 unsigned int statisticsAvgLength_; 101 }; 102 69 103 70 104 /** … … 74 108 Game::Game(int argc, char** argv) 75 109 { 76 assert(singletonRef_s == 0); 110 if (singletonRef_s != 0) 111 { 112 COUT(0) << "Error: The Game singleton cannot be recreated! Shutting down." << std::endl; 113 abort(); 114 } 77 115 singletonRef_s = this; 78 116 79 this->abort_ = false; 117 this->bAbort_ = false; 118 bChangingState_ = false; 119 120 // Create an empty root state 121 declareGameState<GameState>("GameState", "emptyRootGameState", true, false); 80 122 81 123 // reset statistics … … 87 129 this->avgTickTime_ = 0.0f; 88 130 89 90 131 // Set up a basic clock to keep time 91 132 this->gameClock_ = new Clock(); 92 133 93 this->core_ = new orxonox::Core(); 94 this->core_->initialise(argc, argv); 95 96 RegisterRootObject(Game); 97 this->setConfigValues(); 134 // Create the Core 135 this->core_ = new Core(argc, argv); 136 137 // After the core has been created, we can safely instantiate the GameStates 138 for (std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.begin(); 139 it != gameStateDeclarations_s.end(); ++it) 140 { 141 // Only create the states appropriate for the game mode 142 //if (GameMode::showsGraphics || !it->second.bGraphicsMode) 143 GameStateConstrParams params = { it->second.stateName, it->second.bIgnoreTickTime }; 144 gameStates_[getLowercase(it->second.stateName)] = GameStateFactory::fabricate(it->second.className, params); 145 } 146 147 // The empty root state is ALWAYS loaded! 148 this->rootStateNode_ = shared_ptr<GameStateTreeNode>(new GameStateTreeNode()); 149 this->rootStateNode_->state_ = getState("emptyRootGameState"); 150 this->activeStateNode_ = this->rootStateNode_; 151 this->activeStates_.push_back(this->rootStateNode_->state_); 152 153 // Do this after the Core creation! 154 this->configuration_ = new GameConfiguration(); 98 155 } 99 156 … … 103 160 Game::~Game() 104 161 { 105 // Destroy pretty much everyhting left 162 // Destroy the configuration helper class instance 163 delete this->configuration_; 164 165 // Destroy the GameStates (note that the nodes still point to them, but doesn't matter) 166 for (std::map<std::string, GameState*>::const_iterator it = gameStates_.begin(); 167 it != gameStates_.end(); ++it) 168 delete it->second; 169 170 // Destroy the Core and with it almost everything 106 171 delete this->core_; 107 108 172 delete this->gameClock_; 109 173 110 assert(singletonRef_s); 111 singletonRef_s = 0; 112 } 113 114 void Game::setConfigValues() 115 { 116 SetConfigValue(statisticsRefreshCycle_, 250000) 117 .description("Sets the time in microseconds interval at which average fps, etc. get updated."); 118 SetConfigValue(statisticsAvgLength_, 1000000) 119 .description("Sets the time in microseconds interval at which average fps, etc. gets calculated."); 120 SetConfigValue(levelName_, "presentation_dm.oxw") 121 .description("Sets the preselection of the level in the main menu."); 122 } 123 124 void Game::setLevel(std::string levelName) 125 { 126 ModifyConfigValue(levelName_, set, levelName); 127 } 128 129 std::string Game::getLevel() 130 { 131 std::string levelName; 132 CommandLine::getValue("level", &levelName); 133 if (levelName == "") 134 return levelName_; 135 else 136 return levelName; 174 // Take care of the GameStateFactories 175 GameStateFactory::destroyFactories(); 176 177 // Don't assign singletonRef_s with NULL! Recreation is not supported 137 178 } 138 179 … … 147 188 void Game::run() 148 189 { 149 // Always start with the ROOT state 150 this->requestedStateNodes_.push_back(this->rootStateNode_); 151 this->activeStateNode_ = this->rootStateNode_; 152 this->loadState(this->rootStateNode_->state_); 190 if (this->requestedStateNodes_.empty()) 191 COUT(0) << "Warning: Starting game without requesting GameState. This automatically terminates the program." << std::endl; 153 192 154 193 // START GAME 155 194 this->gameClock_->capture(); // first delta time should be about 0 seconds 156 while (!this-> abort_ && !this->activeStates_.empty())195 while (!this->bAbort_ && (!this->activeStates_.empty() || this->requestedStateNodes_.size() > 0)) 157 196 { 158 197 this->gameClock_->capture(); … … 160 199 161 200 // STATISTICS 162 statisticsTickInfo tickInfo = {currentTime, 0};201 StatisticsTickInfo tickInfo = {currentTime, 0}; 163 202 statisticsTickTimes_.push_back(tickInfo); 164 203 this->periodTime_ += this->gameClock_->getDeltaTimeMicroseconds(); 165 204 166 205 // UPDATE STATE STACK 167 while (this->requestedStateNodes_.size() > 1)168 { 169 // Note: this->requestedStateNodes_.front() is the currently active state node170 std::vector<shared_ptr<GameStateTreeNode> >::iterator it = this->requestedStateNodes_.begin() + 1;171 if ( *it== this->activeStateNode_->parent_.lock())206 while (this->requestedStateNodes_.size() > 0) 207 { 208 shared_ptr<GameStateTreeNode> requestedStateNode = this->requestedStateNodes_.front(); 209 assert(this->activeStateNode_); 210 if (!this->activeStateNode_->parent_.expired() && requestedStateNode == this->activeStateNode_->parent_.lock()) 172 211 this->unloadState(this->activeStateNode_->state_); 173 212 else // has to be child 174 this->loadState((*it)->state_); 175 this->activeStateNode_ = *it; 213 { 214 try 215 { 216 this->loadState(requestedStateNode->state_); 217 } 218 catch (const std::exception& ex) 219 { 220 COUT(1) << "Error: Loading GameState '" << requestedStateNode->state_->getName() << "' failed: " << ex.what() << std::endl; 221 // All scheduled operations have now been rendered inert --> flush them and issue a warning 222 if (this->requestedStateNodes_.size() > 1) 223 COUT(1) << "All " << this->requestedStateNodes_.size() - 1 << " scheduled transitions have been ignored." << std::endl; 224 this->requestedStateNodes_.clear(); 225 break; 226 } 227 } 228 this->activeStateNode_ = requestedStateNode; 176 229 this->requestedStateNodes_.erase(this->requestedStateNodes_.begin()); 177 230 } 178 231 179 // UPDATE, bottom to top in the stack 180 this->core_->update(*this->gameClock_); 181 for (std::vector<GameState*>::const_iterator it = this->activeStates_.begin(); 232 // UPDATE, Core first 233 try 234 { 235 this->core_->update(*this->gameClock_); 236 } 237 catch (...) 238 { 239 COUT(0) << "An exception occured while ticking the Core. This should really never happen!" << std::endl; 240 COUT(0) << "Closing the program." << std::endl; 241 this->stop(); 242 break; 243 } 244 245 // UPDATE, GameStates bottom to top in the stack 246 // Note: The first element is the empty root state, which doesn't need ticking 247 for (std::vector<GameState*>::const_iterator it = this->activeStates_.begin() + 1; 182 248 it != this->activeStates_.end(); ++it) 183 249 { 184 // Add tick time for most of the states 185 uint64_t timeBeforeTick; 186 if ((*it)->getCountTickTime()) 187 timeBeforeTick = this->gameClock_->getRealMicroseconds(); 188 189 (*it)->update(*this->gameClock_); 190 191 if ((*it)->getCountTickTime()) 192 this->addTickTime(static_cast<uint32_t>(this->gameClock_->getRealMicroseconds() - timeBeforeTick)); 250 bool threwException = false; 251 try 252 { 253 // Add tick time for most of the states 254 uint64_t timeBeforeTick; 255 if (!(*it)->ignoreTickTime()) 256 timeBeforeTick = this->gameClock_->getRealMicroseconds(); 257 (*it)->update(*this->gameClock_); 258 if (!(*it)->ignoreTickTime()) 259 this->addTickTime(static_cast<uint32_t>(this->gameClock_->getRealMicroseconds() - timeBeforeTick)); 260 } 261 catch (const std::exception& ex) 262 { 263 threwException = true; 264 COUT(0) << "Exception while ticking: " << ex.what() << std::endl; 265 } 266 catch (...) 267 { 268 threwException = true; 269 } 270 if (threwException) 271 { 272 COUT(1) << "An exception occured while ticking GameState '" << (*it)->getName() << "'. This should really never happen!" << std::endl; 273 COUT(1) << "Unloading all GameStates depending on the one that crashed." << std::endl; 274 if ((*it)->getParent() != NULL) 275 this->requestState((*it)->getParent()->getName()); 276 else 277 this->stop(); 278 break; 279 } 280 193 281 } 194 282 195 283 // STATISTICS 196 if (this->periodTime_ > statisticsRefreshCycle_)197 { 198 std::list< statisticsTickInfo>::iterator it = this->statisticsTickTimes_.begin();284 if (this->periodTime_ > this->configuration_->statisticsRefreshCycle_) 285 { 286 std::list<StatisticsTickInfo>::iterator it = this->statisticsTickTimes_.begin(); 199 287 assert(it != this->statisticsTickTimes_.end()); 200 int64_t lastTime = currentTime - this-> statisticsAvgLength_;288 int64_t lastTime = currentTime - this->configuration_->statisticsAvgLength_; 201 289 if ((int64_t)it->tickTime < lastTime) 202 290 { 203 291 do 204 292 { 205 assert(this->periodTickTime_ > it->tickLength);293 assert(this->periodTickTime_ >= it->tickLength); 206 294 this->periodTickTime_ -= it->tickLength; 207 295 ++it; … … 215 303 this->avgTickTime_ = static_cast<float>(this->periodTickTime_) / framesPerPeriod / 1000.0f; 216 304 217 this->periodTime_ -= this-> statisticsRefreshCycle_;305 this->periodTime_ -= this->configuration_->statisticsRefreshCycle_; 218 306 } 219 307 } 220 308 221 309 // UNLOAD all remaining states 222 while ( !this->activeStates_.empty())310 while (this->activeStates_.size() > 1) 223 311 this->unloadState(this->activeStates_.back()); 224 this->activeStateNode_ .reset();312 this->activeStateNode_ = this->rootStateNode_; 225 313 this->requestedStateNodes_.clear(); 226 314 } … … 228 316 void Game::stop() 229 317 { 230 this-> abort_ = true;318 this->bAbort_ = true; 231 319 } 232 320 … … 244 332 { 245 333 GameState* state = this->getState(name); 246 if (state == NULL || this->activeStateNode_ == NULL)334 if (state == NULL) 247 335 return; 248 336 249 shared_ptr<GameStateTreeNode> requestedNode; 250 251 // this->requestedStateNodes_.back() is the currently active state 252 shared_ptr<GameStateTreeNode> lastRequestedNode = this->requestedStateNodes_.back(); 253 254 // Already the active node? 337 //if (this->bChangingState_) 338 //{ 339 // COUT(2) << "Warning: Requesting GameStates while loading/unloading a GameState is illegal! Ignoring." << std::endl; 340 // return; 341 //} 342 343 shared_ptr<GameStateTreeNode> lastRequestedNode; 344 if (this->requestedStateNodes_.empty()) 345 lastRequestedNode = this->activeStateNode_; 346 else 347 lastRequestedNode = this->requestedStateNodes_.back(); 255 348 if (state == lastRequestedNode->state_) 256 349 { … … 260 353 261 354 // Check children first 355 std::vector<shared_ptr<GameStateTreeNode> > requestedNodes; 262 356 for (unsigned int i = 0; i < lastRequestedNode->children_.size(); ++i) 263 357 { 264 358 if (lastRequestedNode->children_[i]->state_ == state) 265 359 { 266 requestedNode = lastRequestedNode->children_[i];360 requestedNodes.push_back(lastRequestedNode->children_[i]); 267 361 break; 268 362 } 269 363 } 270 364 271 // Check parent and all its grand parents 272 shared_ptr<GameStateTreeNode> currentNode = lastRequestedNode; 273 while (requestedNode == NULL && currentNode != NULL) 274 { 275 if (currentNode->state_ == state) 276 requestedNode = currentNode; 277 currentNode = currentNode->parent_.lock(); 278 } 279 280 if (requestedNode == NULL) 365 if (requestedNodes.empty()) 366 { 367 // Check parent and all its grand parents 368 shared_ptr<GameStateTreeNode> currentNode = lastRequestedNode; 369 while (currentNode != NULL) 370 { 371 if (currentNode->state_ == state) 372 break; 373 currentNode = currentNode->parent_.lock(); 374 requestedNodes.push_back(currentNode); 375 } 376 } 377 378 if (requestedNodes.empty()) 281 379 COUT(1) << "Error: Requested GameState transition is not allowed. Ignoring." << std::endl; 282 380 else 283 this->requestedStateNodes_. push_back(requestedNode);381 this->requestedStateNodes_.insert(requestedStateNodes_.end(), requestedNodes.begin(), requestedNodes.end()); 284 382 } 285 383 … … 293 391 void Game::popState() 294 392 { 295 if (this->activeStateNode_ != NULL && this->requestedStateNodes_.back()->parent_.lock()) 296 this->requestState(this->requestedStateNodes_.back()->parent_.lock()->state_->getName()); 393 shared_ptr<GameStateTreeNode> lastRequestedNode; 394 if (this->requestedStateNodes_.empty()) 395 lastRequestedNode = this->activeStateNode_; 297 396 else 298 COUT(2) << "Warning: Could not pop GameState. Ignoring." << std::endl; 397 lastRequestedNode = this->requestedStateNodes_.back(); 398 if (lastRequestedNode != this->rootStateNode_) 399 this->requestState(lastRequestedNode->parent_.lock()->state_->getName()); 400 else 401 COUT(2) << "Warning: Can't pop the internal dummy root GameState" << std::endl; 299 402 } 300 403 301 404 GameState* Game::getState(const std::string& name) 302 405 { 303 std::map<std::string, GameState*>::const_iterator it = allStates_s.find(getLowercase(name));304 if (it != allStates_s.end())406 std::map<std::string, GameState*>::const_iterator it = gameStates_.find(getLowercase(name)); 407 if (it != gameStates_.end()) 305 408 return it->second; 306 409 else … … 325 428 while(pos < str.size() && str[pos] != ' ') 326 429 ++pos; 327 stateStrings.push_back(std::pair<std::string, unsigned>( 328 str.substr(startPos, pos - startPos), indentation)); 430 stateStrings.push_back(std::make_pair(str.substr(startPos, pos - startPos), indentation)); 329 431 } 330 432 unsigned int currentLevel = 0; 331 shared_ptr<GameStateTreeNode> currentNode ;433 shared_ptr<GameStateTreeNode> currentNode = this->rootStateNode_; 332 434 for (std::vector<std::pair<std::string, unsigned> >::const_iterator it = stateStrings.begin(); it != stateStrings.end(); ++it) 333 435 { 334 436 std::string newStateName = it->first; 335 unsigned newLevel = it->second ;437 unsigned newLevel = it->second + 1; // empty root is 0 336 438 GameState* newState = this->getState(newStateName); 337 439 if (!newState) 338 ThrowException(GameState, std::string("GameState with name '") + newStateName + "' not found!"); 339 if (newLevel == 0) 340 { 341 // root 342 if (this->rootStateNode_ != NULL) 343 ThrowException(GameState, "No two root GameStates are allowed!"); 344 shared_ptr<GameStateTreeNode> newNode(new GameStateTreeNode); 345 newNode->state_ = newState; 346 this->rootStateNode_ = newNode; 347 currentNode = this->rootStateNode_; 348 } 349 else if (currentNode) 350 { 351 shared_ptr<GameStateTreeNode> newNode(new GameStateTreeNode); 352 newNode->state_ = newState; 353 if (newLevel < currentLevel) 354 { 355 // Get down the hierarchy 356 do 357 currentNode = currentNode->parent_.lock(); 358 while (newLevel < --currentLevel); 359 } 360 if (newLevel == currentLevel) 361 { 362 // same level 363 newNode->parent_ = currentNode->parent_; 364 newNode->parent_.lock()->children_.push_back(newNode); 365 } 366 else if (newLevel == currentLevel + 1) 367 { 368 // child 369 newNode->parent_ = currentNode; 370 currentNode->children_.push_back(newNode); 371 } 372 else 373 ThrowException(GameState, "Indentation error while parsing the hierarchy."); 374 currentNode = newNode; 375 currentLevel = newLevel; 440 ThrowException(GameState, "GameState with name '" << newStateName << "' not found!"); 441 if (newState == this->rootStateNode_->state_) 442 ThrowException(GameState, "You shouldn't use 'emptyRootGameState' in the hierarchy..."); 443 shared_ptr<GameStateTreeNode> newNode(new GameStateTreeNode); 444 newNode->state_ = newState; 445 446 if (newLevel <= currentLevel) 447 { 448 do 449 currentNode = currentNode->parent_.lock(); 450 while (newLevel <= --currentLevel); 451 } 452 if (newLevel == currentLevel + 1) 453 { 454 // Add the child 455 newNode->parent_ = currentNode; 456 currentNode->children_.push_back(newNode); 457 currentNode->state_->addChild(newNode->state_); 376 458 } 377 459 else 378 {379 ThrowException(GameState, "No root GameState specified!");380 }460 ThrowException(GameState, "Indentation error while parsing the hierarchy."); 461 currentNode = newNode; 462 currentLevel = newLevel; 381 463 } 382 464 } … … 386 468 void Game::loadState(GameState* state) 387 469 { 470 this->bChangingState_ = true; 471 state->activate(); 388 472 if (!this->activeStates_.empty()) 389 473 this->activeStates_.back()->activity_.topState = false; 390 state->activate();474 this->activeStates_.push_back(state); 391 475 state->activity_.topState = true; 392 this-> activeStates_.push_back(state);476 this->bChangingState_ = false; 393 477 } 394 478 395 479 void Game::unloadState(orxonox::GameState* state) 396 480 { 481 this->bChangingState_ = true; 397 482 state->activity_.topState = false; 398 state->deactivate();399 483 this->activeStates_.pop_back(); 400 484 if (!this->activeStates_.empty()) 401 485 this->activeStates_.back()->activity_.topState = true; 402 } 403 404 /*static*/ bool Game::addGameState(GameState* state) 405 { 406 std::map<std::string, GameState*>::const_iterator it = allStates_s.find(getLowercase(state->getName())); 407 if (it == allStates_s.end()) 408 allStates_s[getLowercase(state->getName())] = state; 409 else 410 ThrowException(GameState, "Cannot add two GameStates with the same name to 'Game'."); 411 412 // just a required dummy return value 413 return true; 414 } 415 416 /*static*/ void Game::destroyStates() 417 { 418 // Delete all GameStates created by the macros 419 for (std::map<std::string, GameState*>::const_iterator it = allStates_s.begin(); it != allStates_s.end(); ++it) 486 try 487 { 488 state->deactivate(); 489 } 490 catch (const std::exception& ex) 491 { 492 COUT(2) << "Warning: Unloading GameState '" << state->getName() << "' threw an exception: " << ex.what() << std::endl; 493 COUT(2) << " There might be potential resource leaks involved! To avoid this, improve exception-safety." << std::endl; 494 } 495 this->bChangingState_ = false; 496 } 497 498 std::map<std::string, Game::GameStateFactory*> Game::GameStateFactory::factories_s; 499 500 /*static*/ GameState* Game::GameStateFactory::fabricate(const std::string& className, const GameStateConstrParams& params) 501 { 502 std::map<std::string, GameStateFactory*>::const_iterator it = factories_s.find(className); 503 assert(it != factories_s.end()); 504 return it->second->fabricate(params); 505 } 506 507 /*static*/ void Game::GameStateFactory::destroyFactories() 508 { 509 for (std::map<std::string, GameStateFactory*>::const_iterator it = factories_s.begin(); it != factories_s.end(); ++it) 420 510 delete it->second; 421 allStates_s.clear();511 factories_s.clear(); 422 512 } 423 513 } -
code/trunk/src/core/Game.h
r3196 r3280 46 46 #include <boost/preprocessor/cat.hpp> 47 47 48 #include "OrxonoxClass.h" 48 #include "util/Debug.h" 49 #include "util/StringUtils.h" 49 50 50 51 /** … … 53 54 and every following paramter is a constructor argument (which is usually non existent) 54 55 */ 55 #define AddGameState(classname, ...) \56 static bool BOOST_PP_CAT(bGameStateDummy_##class name, __LINE__) = orxonox::Game::addGameState(new classname(__VA_ARGS__))56 #define DeclareGameState(className, stateName, bIgnoreTickTime, bGraphicsMode) \ 57 static bool BOOST_PP_CAT(bGameStateDummy_##className, __LINE__) = orxonox::Game::declareGameState<className>(#className, stateName, bIgnoreTickTime, bGraphicsMode) 57 58 58 // tolua_begin59 59 namespace orxonox 60 60 { 61 class GameConfiguration; 62 61 63 /** 62 64 @brief … … 64 66 */ 65 67 class _CoreExport Game 66 // tolua_end67 : public OrxonoxClass68 // tolua_begin69 68 { 70 //tolua_end71 69 public: 72 70 Game(int argc, char** argv); 73 71 ~Game(); 74 void setConfigValues();75 72 76 73 void setStateHierarchy(const std::string& str); … … 91 88 void addTickTime(uint32_t length); 92 89 93 static bool addGameState(GameState* state); 94 static void destroyStates(); 95 static Game& getInstance() { assert(singletonRef_s); return *singletonRef_s; } //tolua_export 96 97 void setLevel(std::string levelName); //tolua_export 98 std::string getLevel(); //tolua_export 90 template <class T> 91 static bool declareGameState(const std::string& className, const std::string& stateName, bool bIgnoreTickTime, bool bConsoleMode); 92 static Game& getInstance() { assert(singletonRef_s); return *singletonRef_s; } 99 93 100 94 private: 101 struct statisticsTickInfo 95 class _CoreExport GameStateFactory 96 { 97 public: 98 virtual ~GameStateFactory() { } 99 static GameState* fabricate(const std::string& className, const GameStateConstrParams& params); 100 template <class T> 101 static void createFactory(const std::string& className) 102 { factories_s[className] = new TemplateGameStateFactory<T>(); } 103 static void destroyFactories(); 104 private: 105 virtual GameState* fabricate(const GameStateConstrParams& params) = 0; 106 static std::map<std::string, GameStateFactory*> factories_s; 107 }; 108 template <class T> 109 class TemplateGameStateFactory : public GameStateFactory 110 { 111 public: 112 GameState* fabricate(const GameStateConstrParams& params) 113 { return new T(params); } 114 }; 115 116 struct GameStateInfo 117 { 118 std::string stateName; 119 std::string className; 120 bool bIgnoreTickTime; 121 bool bGraphicsMode; 122 }; 123 124 struct StatisticsTickInfo 102 125 { 103 126 uint64_t tickTime; … … 110 133 void unloadState(GameState* state); 111 134 112 std::vector<GameState*> activeStates_; 135 std::map<std::string, GameState*> gameStates_; 136 std::vector<GameState*> activeStates_; 113 137 boost::shared_ptr<GameStateTreeNode> rootStateNode_; 114 138 boost::shared_ptr<GameStateTreeNode> activeStateNode_; … … 117 141 Core* core_; 118 142 Clock* gameClock_; 143 GameConfiguration* configuration_; 119 144 120 bool abort_; 145 bool bChangingState_; 146 bool bAbort_; 121 147 122 148 // variables for time statistics 123 149 uint64_t statisticsStartTime_; 124 std::list< statisticsTickInfo> statisticsTickTimes_;150 std::list<StatisticsTickInfo> statisticsTickTimes_; 125 151 uint32_t periodTime_; 126 152 uint32_t periodTickTime_; … … 128 154 float avgTickTime_; 129 155 130 // config values 131 unsigned int statisticsRefreshCycle_; 132 unsigned int statisticsAvgLength_; 133 std::string levelName_; 156 static std::map<std::string, GameStateInfo> gameStateDeclarations_s; 157 static Game* singletonRef_s; //!< Pointer to the Singleton 158 }; 134 159 135 static std::map<std::string, GameState*> allStates_s; 136 static Game* singletonRef_s; //!< Pointer to the Singleton 137 // tolua_begin 138 }; 160 template <class T> 161 /*static*/ bool Game::declareGameState(const std::string& className, const std::string& stateName, bool bIgnoreTickTime, bool bGraphicsMode) 162 { 163 std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.find(getLowercase(stateName)); 164 if (it == gameStateDeclarations_s.end()) 165 { 166 GameStateInfo& info = gameStateDeclarations_s[getLowercase(stateName)]; 167 info.stateName = stateName; 168 info.className = className; 169 info.bIgnoreTickTime = bIgnoreTickTime; 170 info.bGraphicsMode = bGraphicsMode; 171 } 172 else 173 { 174 COUT(0) << "Error: Cannot declare two GameStates with the same name." << std::endl; 175 COUT(0) << " Ignoring second one ('" << stateName << "')." << std::endl; 176 } 177 178 // Create a factory to delay GameState creation 179 GameStateFactory::createFactory<T>(className); 180 181 // just a required dummy return value 182 return true; 183 } 139 184 } 140 //tolua_end 185 141 186 #endif /* _Game_H__ */ -
code/trunk/src/core/GameState.cc
r3196 r3280 45 45 Constructor only initialises variables and sets the name permanently. 46 46 */ 47 GameState::GameState(const std::string& name, bool countTickTime)48 : name_( name)49 , b CountTickTime_(countTickTime)47 GameState::GameState(const GameStateConstrParams& params) 48 : name_(params.name) 49 , bIgnoreTickTime_(params.bIgnoreTickTime) 50 50 , parent_(0) 51 51 { -
code/trunk/src/core/GameState.h
r3196 r3280 45 45 /** 46 46 @brief 47 Helper class to group construction parameters for better genericity. 48 */ 49 struct GameStateConstrParams 50 { 51 std::string name; 52 bool bIgnoreTickTime; 53 }; 54 55 /** 56 @brief 47 57 An implementation of a tree to manage game states. 48 58 This leads to a certain hierarchy that is created at runtime. … … 77 87 78 88 public: 79 GameState(const std::string& name, bool countTicktime = true);89 GameState(const GameStateConstrParams& params); 80 90 virtual ~GameState(); 81 91 … … 84 94 GameState* getParent() const { return this->parent_; } 85 95 86 bool getCountTickTime() const { return this->bCountTickTime_; }96 bool ignoreTickTime() const { return this->bIgnoreTickTime_; } 87 97 88 98 void addChild(GameState* state); … … 90 100 91 101 protected: 92 virtual void activate() = 0;93 virtual void deactivate() = 0;94 virtual void update(const Clock& time) = 0;102 virtual void activate() { } 103 virtual void deactivate() { } 104 virtual void update(const Clock& time) { } 95 105 96 106 private: … … 103 113 const std::string name_; 104 114 State activity_; 105 const bool b CountTickTime_;115 const bool bIgnoreTickTime_; 106 116 GameState* parent_; 107 117 std::map<std::string, GameState*> children_; -
code/trunk/src/core/IRC.cc
r3196 r3280 68 68 { COUT(1) << "Error while initializing Tcl (IRC): " << e.what(); } 69 69 70 this->nickname_ = "orx" + getConvertedValue<int, std::string>((unsigned int)rand());70 this->nickname_ = "orx" + multi_cast<std::string>(static_cast<unsigned int>(rand())); 71 71 TclThreadManager::execute(threadID, "set nickname " + this->nickname_); 72 72 TclThreadManager::execute(threadID, "source irc.tcl"); -
code/trunk/src/core/Identifier.cc
r3196 r3280 36 36 #include <ostream> 37 37 38 #include "util/String .h"38 #include "util/StringUtils.h" 39 39 #include "ConfigValueContainer.h" 40 40 #include "ConsoleCommand.h" -
code/trunk/src/core/Language.cc
r3198 r3280 194 194 @return The filename 195 195 */ 196 conststd::string Language::getFilename(const std::string& language)196 std::string Language::getFilename(const std::string& language) 197 197 { 198 198 return std::string("translation_" + language + ".lang"); -
code/trunk/src/core/Language.h
r2662 r3280 114 114 class _CoreExport Language 115 115 { 116 friend class Core ;116 friend class CoreConfiguration; 117 117 118 118 public: … … 130 130 void readTranslatedLanguageFile(); 131 131 void writeDefaultLanguageFile() const; 132 static conststd::string getFilename(const std::string& language);132 static std::string getFilename(const std::string& language); 133 133 LanguageEntry* createEntry(const LanguageEntryLabel& label, const std::string& entry); 134 134 -
code/trunk/src/core/LuaBind.cc
r3198 r3280 38 38 39 39 #include "util/Debug.h" 40 #include "util/String .h"40 #include "util/StringUtils.h" 41 41 #include "ToluaBindCore.h" 42 42 #include "Core.h" -
code/trunk/src/core/OrxonoxClass.cc
r3196 r3280 78 78 79 79 /** @brief Returns true if the objects class is of the given type or a derivative. */ 80 bool OrxonoxClass::isA(const SubclassIdentifier<classB>* identifier)80 template <class B> bool OrxonoxClass::isA(const SubclassIdentifier<B>* identifier) 81 81 { return this->getIdentifier()->isA(identifier->getIdentifier()); } 82 82 /** @brief Returns true if the objects class is exactly of the given type. */ 83 bool OrxonoxClass::isExactlyA(const SubclassIdentifier<classB>* identifier)83 template <class B> bool OrxonoxClass::isExactlyA(const SubclassIdentifier<B>* identifier) 84 84 { return this->getIdentifier()->isExactlyA(identifier->getIdentifier()); } 85 85 /** @brief Returns true if the objects class is a child of the given type. */ 86 bool OrxonoxClass::isChildOf(const SubclassIdentifier<classB>* identifier)86 template <class B> bool OrxonoxClass::isChildOf(const SubclassIdentifier<B>* identifier) 87 87 { return this->getIdentifier()->isChildOf(identifier->getIdentifier()); } 88 88 /** @brief Returns true if the objects class is a direct child of the given type. */ 89 bool OrxonoxClass::isDirectChildOf(const SubclassIdentifier<classB>* identifier)89 template <class B> bool OrxonoxClass::isDirectChildOf(const SubclassIdentifier<B>* identifier) 90 90 { return this->getIdentifier()->isDirectChildOf(identifier->getIdentifier()); } 91 91 /** @brief Returns true if the objects class is a parent of the given type. */ 92 bool OrxonoxClass::isParentOf(const SubclassIdentifier<classB>* identifier)92 template <class B> bool OrxonoxClass::isParentOf(const SubclassIdentifier<B>* identifier) 93 93 { return this->getIdentifier()->isParentOf(identifier->getIdentifier()); } 94 94 /** @brief Returns true if the objects class is a direct parent of the given type. */ 95 bool OrxonoxClass::isDirectParentOf(const SubclassIdentifier<classB>* identifier)95 template <class B> bool OrxonoxClass::isDirectParentOf(const SubclassIdentifier<B>* identifier) 96 96 { return this->getIdentifier()->isDirectParentOf(identifier->getIdentifier()); } 97 97 98 98 99 99 /** @brief Returns true if the objects class is of the given type or a derivative. */ 100 bool OrxonoxClass::isA(const SubclassIdentifier<classB> identifier)100 template <class B> bool OrxonoxClass::isA(const SubclassIdentifier<B> identifier) 101 101 { return this->getIdentifier()->isA(identifier.getIdentifier()); } 102 102 /** @brief Returns true if the objects class is exactly of the given type. */ 103 bool OrxonoxClass::isExactlyA(const SubclassIdentifier<classB> identifier)103 template <class B> bool OrxonoxClass::isExactlyA(const SubclassIdentifier<B> identifier) 104 104 { return this->getIdentifier()->isExactlyA(identifier.getIdentifier()); } 105 105 /** @brief Returns true if the objects class is a child of the given type. */ 106 bool OrxonoxClass::isChildOf(const SubclassIdentifier<classB> identifier)106 template <class B> bool OrxonoxClass::isChildOf(const SubclassIdentifier<B> identifier) 107 107 { return this->getIdentifier()->isChildOf(identifier.getIdentifier()); } 108 108 /** @brief Returns true if the objects class is a direct child of the given type. */ 109 bool OrxonoxClass::isDirectChildOf(const SubclassIdentifier<classB> identifier)109 template <class B> bool OrxonoxClass::isDirectChildOf(const SubclassIdentifier<B> identifier) 110 110 { return this->getIdentifier()->isDirectChildOf(identifier.getIdentifier()); } 111 111 /** @brief Returns true if the objects class is a parent of the given type. */ 112 bool OrxonoxClass::isParentOf(const SubclassIdentifier<classB> identifier)112 template <class B> bool OrxonoxClass::isParentOf(const SubclassIdentifier<B> identifier) 113 113 { return this->getIdentifier()->isParentOf(identifier.getIdentifier()); } 114 114 /** @brief Returns true if the objects class is a direct parent of the given type. */ 115 bool OrxonoxClass::isDirectParentOf(const SubclassIdentifier<classB> identifier)115 template <class B> bool OrxonoxClass::isDirectParentOf(const SubclassIdentifier<B> identifier) 116 116 { return this->getIdentifier()->isDirectParentOf(identifier.getIdentifier()); } 117 117 -
code/trunk/src/core/OrxonoxClass.h
r3196 r3280 80 80 bool isDirectParentOf(const Identifier* identifier); 81 81 82 bool isA(const SubclassIdentifier<classB>* identifier);83 bool isExactlyA(const SubclassIdentifier<classB>* identifier);84 bool isChildOf(const SubclassIdentifier<classB>* identifier);85 bool isDirectChildOf(const SubclassIdentifier<classB>* identifier);86 bool isParentOf(const SubclassIdentifier<classB>* identifier);87 bool isDirectParentOf(const SubclassIdentifier<classB>* identifier);82 template <class B> bool isA(const SubclassIdentifier<B>* identifier); 83 template <class B> bool isExactlyA(const SubclassIdentifier<B>* identifier); 84 template <class B> bool isChildOf(const SubclassIdentifier<B>* identifier); 85 template <class B> bool isDirectChildOf(const SubclassIdentifier<B>* identifier); 86 template <class B> bool isParentOf(const SubclassIdentifier<B>* identifier); 87 template <class B> bool isDirectParentOf(const SubclassIdentifier<B>* identifier); 88 88 89 bool isA(const SubclassIdentifier<classB> identifier);90 bool isExactlyA(const SubclassIdentifier<classB> identifier);91 bool isChildOf(const SubclassIdentifier<classB> identifier);92 bool isDirectChildOf(const SubclassIdentifier<classB> identifier);93 bool isParentOf(const SubclassIdentifier<classB> identifier);94 bool isDirectParentOf(const SubclassIdentifier<classB> identifier);89 template <class B> bool isA(const SubclassIdentifier<B> identifier); 90 template <class B> bool isExactlyA(const SubclassIdentifier<B> identifier); 91 template <class B> bool isChildOf(const SubclassIdentifier<B> identifier); 92 template <class B> bool isDirectChildOf(const SubclassIdentifier<B> identifier); 93 template <class B> bool isParentOf(const SubclassIdentifier<B> identifier); 94 template <class B> bool isDirectParentOf(const SubclassIdentifier<B> identifier); 95 95 96 96 bool isA(const OrxonoxClass* object); -
code/trunk/src/core/Shell.cc
r3196 r3280 78 78 OutputHandler::getOutStream().setOutputBuffer(&this->outputBuffer_); 79 79 80 // Get a config file for the command history 81 this->commandHistoryConfigFileType_ = ConfigFileManager::getInstance().getNewConfigFileType(); 82 ConfigFileManager::getInstance().setFilename(this->commandHistoryConfigFileType_, "commandHistory.ini"); 83 80 84 this->setConfigValues(); 81 85 … … 93 97 void Shell::setConfigValues() 94 98 { 95 SetConfigValue(maxHistoryLength_, 100).callback(this, &Shell::commandHistoryLengthChanged); 96 SetConfigValue(historyOffset_, 0).callback(this, &Shell::commandHistoryOffsetChanged); 97 SetConfigValueVector(commandHistory_, std::vector<std::string>()); 99 SetConfigValueGeneric(commandHistoryConfigFileType_, maxHistoryLength_, 100) 100 .callback(this, &Shell::commandHistoryLengthChanged); 101 SetConfigValueGeneric(commandHistoryConfigFileType_, historyOffset_, 0) 102 .callback(this, &Shell::commandHistoryOffsetChanged); 103 SetConfigValueVectorGeneric(commandHistoryConfigFileType_, commandHistory_, std::vector<std::string>()); 98 104 } 99 105 -
code/trunk/src/core/Shell.h
r3196 r3280 37 37 #include <vector> 38 38 39 #include "util/OutputBuffer.h" 40 #include "input/InputBuffer.h" 39 41 #include "OrxonoxClass.h" 40 #include "input/InputBuffer.h" 41 #include "util/OutputBuffer.h" 42 #include "ConfigFileManager.h" 42 43 43 44 namespace orxonox … … 145 146 bool bAddOutputLevel_; 146 147 148 ConfigFileType commandHistoryConfigFileType_; 149 147 150 static Shell* singletonRef_s; 148 151 }; -
code/trunk/src/core/TclBind.cc
r3196 r3280 34 34 35 35 #include "util/Debug.h" 36 #include "util/String .h"36 #include "util/StringUtils.h" 37 37 #include "CommandExecutor.h" 38 38 #include "ConsoleCommand.h" -
code/trunk/src/core/TclThreadManager.cc
r3196 r3280 94 94 boost::mutex::scoped_lock bundles_lock(TclThreadManager::getInstance().bundlesMutex_); 95 95 TclThreadManager::getInstance().threadCounter_++; 96 std::string name = getConvertedValue<unsigned int,std::string>(TclThreadManager::getInstance().threadCounter_);96 std::string name = multi_cast<std::string>(TclThreadManager::getInstance().threadCounter_); 97 97 98 98 TclInterpreterBundle* bundle = new TclInterpreterBundle; … … 192 192 { 193 193 boost::mutex::scoped_lock queue_lock(TclThreadManager::getInstance().orxonoxInterpreterBundle_.queueMutex_); 194 output += getConvertedValue<unsigned int,std::string>(TclThreadManager::getInstance().orxonoxInterpreterBundle_.queue_.size());194 output += multi_cast<std::string>(TclThreadManager::getInstance().orxonoxInterpreterBundle_.queue_.size()); 195 195 } 196 196 output += "\t\t"; … … 201 201 for (std::map<unsigned int, TclInterpreterBundle*>::const_iterator it = TclThreadManager::getInstance().interpreterBundles_.begin(); it != TclThreadManager::getInstance().interpreterBundles_.end(); ++it) 202 202 { 203 std::string output = getConvertedValue<unsigned int,std::string>((*it).first);203 std::string output = multi_cast<std::string>((*it).first); 204 204 output += "\t\t"; 205 205 { 206 206 boost::mutex::scoped_lock queue_lock((*it).second->queueMutex_); 207 output += getConvertedValue<unsigned int,std::string>((*it).second->queue_.size());207 output += multi_cast<std::string>((*it).second->queue_.size()); 208 208 } 209 209 output += "\t\t"; … … 342 342 else 343 343 { 344 this->error("Error: No Tcl-interpreter with ID " + getConvertedValue<unsigned int,std::string>(threadID) + " existing.");344 this->error("Error: No Tcl-interpreter with ID " + multi_cast<std::string>(threadID) + " existing."); 345 345 return 0; 346 346 } … … 355 355 output += " "; 356 356 357 output += getConvertedValue<unsigned int,std::string>(*it);357 output += multi_cast<std::string>(*it); 358 358 } 359 359 return output; … … 444 444 if (bundle->queue_.size() >= TCLTHREADMANAGER_MAX_QUEUE_LENGTH) 445 445 { 446 this->error("Error: Queue of Tcl-interpreter " + getConvertedValue<unsigned int,std::string>(threadID) + " is full, couldn't add command.");446 this->error("Error: Queue of Tcl-interpreter " + multi_cast<std::string>(threadID) + " is full, couldn't add command."); 447 447 return; 448 448 } … … 492 492 if (std::find(target->queriers_.begin(), target->queriers_.end(), target->id_) != target->queriers_.end()) 493 493 { 494 this->error("Error: Circular query (" + this->dumpList(target->queriers_) + " -> " + getConvertedValue<unsigned int, std::string>(target->id_) + "), couldn't query Tcl-interpreter with ID " + getConvertedValue<unsigned int, std::string>(target->id_) + " from other interpreter with ID " + getConvertedValue<unsigned int,std::string>(querier->id_) + ".");494 this->error("Error: Circular query (" + this->dumpList(target->queriers_) + " -> " + multi_cast<std::string>(target->id_) + "), couldn't query Tcl-interpreter with ID " + multi_cast<std::string>(target->id_) + " from other interpreter with ID " + multi_cast<std::string>(querier->id_) + "."); 495 495 return false; 496 496 } … … 585 585 else 586 586 { 587 this->error("Error: Couldn't query Tcl-interpreter with ID " + getConvertedValue<unsigned int,std::string>(threadID) + ", interpreter is busy right now.");587 this->error("Error: Couldn't query Tcl-interpreter with ID " + multi_cast<std::string>(threadID) + ", interpreter is busy right now."); 588 588 } 589 589 } … … 665 665 catch (Tcl::tcl_error const &e) 666 666 { 667 TclThreadManager::getInstance().error("Tcl (ID " + getConvertedValue<unsigned int,std::string>(interpreterBundle->id_) + ") error: " + e.what());667 TclThreadManager::getInstance().error("Tcl (ID " + multi_cast<std::string>(interpreterBundle->id_) + ") error: " + e.what()); 668 668 } 669 669 catch (std::exception const &e) 670 670 { 671 TclThreadManager::getInstance().error("Error while executing Tcl (ID " + getConvertedValue<unsigned int,std::string>(interpreterBundle->id_) + "): " + e.what());671 TclThreadManager::getInstance().error("Error while executing Tcl (ID " + multi_cast<std::string>(interpreterBundle->id_) + "): " + e.what()); 672 672 } 673 673 -
code/trunk/src/core/input/Button.cc
r2662 r3280 37 37 #include "util/Convert.h" 38 38 #include "util/SubString.h" 39 #include "util/String .h"39 #include "util/StringUtils.h" 40 40 #include "util/Debug.h" 41 41 #include "core/ConsoleCommand.h" … … 127 127 '\\', false, '"', false, '(', ')', false, '\0'); 128 128 129 KeybindMode:: Enummode = KeybindMode::None;129 KeybindMode::Value mode = KeybindMode::None; 130 130 float paramModifier = 1.0f; 131 131 std::string commandStr = ""; -
code/trunk/src/core/input/Button.h
r2662 r3280 54 54 void parse(); 55 55 void readConfigValue(ConfigFileType configFile); 56 bool execute(KeybindMode:: Enummode, float abs = 1.0f, float rel = 1.0f);56 bool execute(KeybindMode::Value mode, float abs = 1.0f, float rel = 1.0f); 57 57 58 58 //! Container to allow for better configValue support … … 79 79 }; 80 80 81 inline bool Button::execute(KeybindMode:: Enummode, float abs, float rel)81 inline bool Button::execute(KeybindMode::Value mode, float abs, float rel) 82 82 { 83 83 // execute all the parsed commands in the string -
code/trunk/src/core/input/InputManager.cc
r3196 r3280 43 43 #include "util/Convert.h" 44 44 #include "util/Exception.h" 45 #include "util/ Debug.h"45 #include "util/ScopeGuard.h" 46 46 #include "core/Clock.h" 47 47 #include "core/CoreIncludes.h" … … 70 70 SetConsoleCommand(InputManager, ungrabMouse, true); 71 71 #endif 72 SetCommandLineSwitch(keyboard_no_grab) ;72 SetCommandLineSwitch(keyboard_no_grab).information("Whether not to exclusively grab the keyboard"); 73 73 74 74 EmptyHandler InputManager::EMPTY_HANDLER; … … 177 177 windowHndStr << (unsigned int)windowHnd_; 178 178 paramList.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str())); 179 #if defined(ORXONOX_PLATFORM_WINDOWS) 179 180 //paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE"))); 180 181 //paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND"))); 181 #if defined ORXONOX_PLATFORM_LINUX 182 //paramList.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_NONEXCLUSIVE"))); 183 //paramList.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND"))); 184 #elif defined(ORXONOX_PLATFORM_LINUX) 182 185 paramList.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("true"))); 183 186 paramList.insert(std::make_pair(std::string("x11_mouse_grab"), "true")); … … 191 194 #endif 192 195 193 inputSystem_ = OIS::InputManager::createInputSystem(paramList); 194 CCOUT(ORX_DEBUG) << "Created OIS input system" << std::endl; 195 196 _initialiseKeyboard(); 196 try 197 { 198 inputSystem_ = OIS::InputManager::createInputSystem(paramList); 199 // Exception-safety 200 Loki::ScopeGuard guard = Loki::MakeGuard(OIS::InputManager::destroyInputSystem, inputSystem_); 201 CCOUT(ORX_DEBUG) << "Created OIS input system" << std::endl; 202 203 _initialiseKeyboard(); 204 205 // Nothing below should throw anymore, dismiss the guard 206 guard.Dismiss(); 207 } 208 catch (OIS::Exception& ex) 209 { 210 ThrowException(InitialisationFailed, "Could not initialise the input system: " << ex.what()); 211 } 197 212 198 213 _initialiseMouse(); … … 200 215 if (joyStickSupport) 201 216 _initialiseJoySticks(); 202 // Do this anyway to also inform everythingwhen a joystick was detached.217 // Do this anyway to also inform when a joystick was detached. 203 218 _configureJoySticks(); 204 219 … … 273 288 else 274 289 { 275 ThrowException(InitialisationFailed, " No keyboard found!");290 ThrowException(InitialisationFailed, "InputManager: No keyboard found, cannot proceed!"); 276 291 } 277 292 } … … 301 316 else 302 317 { 303 CCOUT(ORX_WARNING) << "Warning: No mouse found! " << std::endl;318 CCOUT(ORX_WARNING) << "Warning: No mouse found! Proceeding without mouse support." << std::endl; 304 319 } 305 320 } … … 307 322 { 308 323 CCOUT(ORX_WARNING) << "Warning: Failed to create an OIS mouse\n" 309 << "OIS error message: \"" << ex.eText << "\" " << std::endl;324 << "OIS error message: \"" << ex.eText << "\"\n Proceeding without mouse support." << std::endl; 310 325 mouse_ = 0; 311 326 } … … 345 360 } 346 361 } 347 else348 {349 //CCOUT(ORX_WARNING) << "Warning: Joy stick support requested, but no joy stick was found" << std::endl;350 }351 362 } 352 363 … … 528 539 if (internalState_ != Uninitialised) 529 540 { 541 CCOUT(3) << "Destroying ..." << std::endl; 542 543 // kick all active states 'nicely' 544 for (std::map<int, InputState*>::reverse_iterator rit = activeStates_.rbegin(); 545 rit != activeStates_.rend(); ++rit) 546 { 547 (*rit).second->onLeave(); 548 } 549 550 // Destroy calibrator helper handler and state 551 delete keyDetector_; 552 requestDestroyState("calibrator"); 553 // Destroy KeyDetector and state 554 delete calibratorCallbackBuffer_; 555 requestDestroyState("detector"); 556 // destroy the empty InputState 557 _destroyState(this->stateEmpty_); 558 559 // destroy all user InputStates 560 while (inputStatesByName_.size() > 0) 561 _destroyState((*inputStatesByName_.rbegin()).second); 562 563 // destroy the devices 564 _destroyKeyboard(); 565 _destroyMouse(); 566 _destroyJoySticks(); 567 530 568 try 531 569 { 532 CCOUT(3) << "Destroying ..." << std::endl;533 534 // kick all active states 'nicely'535 for (std::map<int, InputState*>::reverse_iterator rit = activeStates_.rbegin();536 rit != activeStates_.rend(); ++rit)537 {538 (*rit).second->onLeave();539 }540 541 // Destroy calibrator helper handler and state542 delete keyDetector_;543 requestDestroyState("calibrator");544 // Destroy KeyDetector and state545 delete calibratorCallbackBuffer_;546 requestDestroyState("detector");547 // destroy the empty InputState548 _destroyState(this->stateEmpty_);549 550 // destroy all user InputStates551 while (inputStatesByName_.size() > 0)552 _destroyState((*inputStatesByName_.rbegin()).second);553 554 // destroy the devices555 _destroyKeyboard();556 _destroyMouse();557 _destroyJoySticks();558 559 570 OIS::InputManager::destroyInputSystem(inputSystem_); 560 561 CCOUT(3) << "Destroying done." << std::endl; 562 } 563 catch (OIS::Exception& ex) 564 { 565 CCOUT(1) << "An exception has occured while destroying:\n" << ex.what() 566 << "This could lead to a possible memory/resource leak!" << std::endl; 571 } 572 catch (...) 573 { 574 CCOUT(1) << "OIS::InputManager destruction failed! Potential resource leak!" << std::endl; 567 575 } 568 576 } … … 578 586 { 579 587 assert(inputSystem_); 580 if (keyboard_) 581 inputSystem_->destroyInputObject(keyboard_); 582 keyboard_ = 0; 583 CCOUT(4) << "Keyboard destroyed." << std::endl; 588 try 589 { 590 if (keyboard_) 591 inputSystem_->destroyInputObject(keyboard_); 592 keyboard_ = 0; 593 CCOUT(4) << "Keyboard destroyed." << std::endl; 594 } 595 catch (...) 596 { 597 CCOUT(1) << "Keyboard destruction failed! Potential resource leak!" << std::endl; 598 } 584 599 } 585 600 … … 591 606 { 592 607 assert(inputSystem_); 593 if (mouse_) 594 inputSystem_->destroyInputObject(mouse_); 595 mouse_ = 0; 596 CCOUT(4) << "Mouse destroyed." << std::endl; 608 try 609 { 610 if (mouse_) 611 inputSystem_->destroyInputObject(mouse_); 612 mouse_ = 0; 613 CCOUT(4) << "Mouse destroyed." << std::endl; 614 } 615 catch (...) 616 { 617 CCOUT(1) << "Mouse destruction failed! Potential resource leak!" << std::endl; 618 } 597 619 } 598 620 … … 607 629 assert(inputSystem_); 608 630 for (unsigned int i = 0; i < joySticksSize_; i++) 609 if (joySticks_[i] != 0) 610 inputSystem_->destroyInputObject(joySticks_[i]); 631 { 632 try 633 { 634 if (joySticks_[i] != 0) 635 inputSystem_->destroyInputObject(joySticks_[i]); 636 } 637 catch (...) 638 { 639 CCOUT(1) << "Joy stick destruction failed! Potential resource leak!" << std::endl; 640 } 641 } 611 642 612 643 joySticks_.clear(); -
code/trunk/src/core/input/KeyBinder.cc
r3196 r3280 96 96 } 97 97 98 // Get a new ConfigFileType from the ConfigFileManager99 this->configFile_ = ConfigFile Manager::getInstance().getNewConfigFileType();98 // We might not even load any bindings at all (KeyDetector for instance) 99 this->configFile_ = ConfigFileType::NoType; 100 100 101 101 // initialise joy sticks separatly to allow for reloading … … 187 187 for (unsigned int iDev = 0; iDev < numberOfJoySticks_; iDev++) 188 188 { 189 std::string deviceNumber = convertToString(iDev);189 std::string deviceNumber = multi_cast<std::string>(iDev); 190 190 // joy stick buttons 191 191 for (unsigned int i = 0; i < JoyStickButtonCode::numberOfButtons; i++) … … 249 249 if (filename.empty()) 250 250 return; 251 252 if (this->configFile_ == ConfigFileType::NoType) 253 { 254 // Get a new ConfigFileType from the ConfigFileManager 255 this->configFile_ = ConfigFileManager::getInstance().getNewConfigFileType(); 256 } 251 257 252 258 ConfigFileManager::getInstance().setFilename(this->configFile_, filename); -
code/trunk/src/network/NetworkPrereqs.h
r3214 r3280 132 132 namespace PacketFlag 133 133 { 134 enum Enum134 enum Value 135 135 { 136 136 Reliable = 1, -
code/trunk/src/network/packet/Acknowledgement.cc
r3214 r3280 37 37 #define PACKET_FLAGS_ACK 0 38 38 #define _PACKETID 0 39 #define _ACKID _PACKETID + sizeof(packet:: ENUM::Type)39 #define _ACKID _PACKETID + sizeof(packet::Type::Value) 40 40 41 41 Acknowledgement::Acknowledgement( unsigned int id, unsigned int clientID ) … … 44 44 flags_ = flags_ | PACKET_FLAGS_ACK; 45 45 data_=new uint8_t[ getSize() ]; 46 *( ENUM::Type *)(data_ + _PACKETID ) = ENUM::Acknowledgement;46 *(Type::Value *)(data_ + _PACKETID ) = Type::Acknowledgement; 47 47 *(uint32_t *)(data_ + _ACKID ) = id; 48 48 clientID_=clientID; -
code/trunk/src/network/packet/Chat.cc
r3214 r3280 38 38 #define PACKET_FLAGS_CHAT PacketFlag::Reliable 39 39 #define _PACKETID 0 40 const int _PLAYERID = _PACKETID + sizeof( ENUM::Type);40 const int _PLAYERID = _PACKETID + sizeof(Type::Value); 41 41 #define _MESSAGELENGTH _PLAYERID + sizeof(uint32_t) 42 42 #define _MESSAGE _MESSAGELENGTH + sizeof(uint32_t) … … 48 48 messageLength_ = message.length()+1; 49 49 data_=new unsigned char[ getSize() ]; 50 *( ENUM::Type *)(data_ + _PACKETID ) = ENUM::Chat;50 *(Type::Value *)(data_ + _PACKETID ) = Type::Chat; 51 51 *(unsigned int *)(data_ + _PLAYERID ) = playerID; 52 52 *(unsigned int *)(data_ + _MESSAGELENGTH ) = messageLength_; -
code/trunk/src/network/packet/ClassID.cc
r3214 r3280 74 74 //set the appropriate packet id 75 75 assert(this->data_); 76 *( ENUM::Type *)(this->data_ + _PACKETID ) = ENUM::ClassID;76 *(Type::Value *)(this->data_ + _PACKETID ) = Type::ClassID; 77 77 78 78 uint8_t *temp=data_+sizeof(uint32_t); -
code/trunk/src/network/packet/DeleteObjects.cc
r3214 r3280 39 39 #define PACKET_FLAG_DELETE PacketFlag::Reliable 40 40 #define _PACKETID 0 41 #define _QUANTITY _PACKETID + sizeof( ENUM::Type)41 #define _QUANTITY _PACKETID + sizeof(Type::Value) 42 42 #define _OBJECTIDS _QUANTITY + sizeof(uint32_t) 43 43 … … 62 62 return false; 63 63 COUT(4) << "sending DeleteObjects: "; 64 unsigned int size = sizeof( ENUM::Type) + sizeof(uint32_t)*(number+1);64 unsigned int size = sizeof(Type::Value) + sizeof(uint32_t)*(number+1); 65 65 data_ = new uint8_t[size]; 66 66 uint8_t *tdata = data_; 67 *reinterpret_cast< ENUM::Type*>(tdata) = ENUM::DeleteObjects;68 tdata += sizeof( ENUM::Type);67 *reinterpret_cast<Type::Value*>(tdata) = Type::DeleteObjects; 68 tdata += sizeof(Type::Value); 69 69 *(uint32_t *)tdata = number; 70 70 tdata += sizeof(uint32_t); -
code/trunk/src/network/packet/FunctionCalls.cc
r3214 r3280 49 49 currentMemBlocks_ = 1; 50 50 data_=new uint8_t[ FUNCTIONCALLS_MEM_ALLOCATION ]; 51 *( ENUM::Type *)(data_ + _PACKETID ) = ENUM::FunctionCalls;51 *(Type::Value *)(data_ + _PACKETID ) = Type::FunctionCalls; 52 52 *(uint32_t*)(data_+sizeof(uint32_t)) = 0; // set nrOfCalls to 0 53 53 } -
code/trunk/src/network/packet/FunctionIDs.cc
r3214 r3280 68 68 //set the appropriate packet id 69 69 assert(this->data_); 70 *( ENUM::Type *)(this->data_ + _PACKETID ) = ENUM::FunctionIDs;70 *(Type::Value *)(this->data_ + _PACKETID ) = Type::FunctionIDs; 71 71 72 72 uint8_t *temp=data_+sizeof(uint32_t); -
code/trunk/src/network/packet/Gamestate.h
r3214 r3280 47 47 class _NetworkExport GamestateHeader{ 48 48 public: 49 GamestateHeader(uint8_t *data){ assert(data); data_ = data; *(uint32_t*)data_ = ENUM::Gamestate; }49 GamestateHeader(uint8_t *data){ assert(data); data_ = data; *(uint32_t*)data_ = Type::Gamestate; } 50 50 GamestateHeader(uint8_t *data, GamestateHeader* h) 51 51 { assert(data); data_=data; memcpy(data_, h->data_, getSize()); } -
code/trunk/src/network/packet/Packet.cc
r3214 r3280 63 63 Packet::Packet(){ 64 64 flags_ = PACKET_FLAG_DEFAULT; 65 packetDirection_ = ENUM::Outgoing;65 packetDirection_ = Direction::Outgoing; 66 66 clientID_=0; 67 67 data_=0; … … 76 76 Packet::Packet(uint8_t *data, unsigned int clientID){ 77 77 flags_ = PACKET_FLAG_DEFAULT; 78 packetDirection_ = ENUM::Incoming;78 packetDirection_ = Direction::Incoming; 79 79 clientID_=clientID; 80 80 data_=data; … … 125 125 126 126 bool Packet::send(){ 127 if(packetDirection_ != ENUM::Outgoing && packetDirection_ != ENUM::Bidirectional ){127 if(packetDirection_ != Direction::Outgoing && packetDirection_ != Direction::Bidirectional ){ 128 128 assert(0); 129 129 return false; … … 147 147 } 148 148 #ifndef NDEBUG 149 switch( *( ENUM::Type *)(data_ + _PACKETID) )149 switch( *(Type::Value *)(data_ + _PACKETID) ) 150 150 { 151 case ENUM::Acknowledgement:152 case ENUM::Chat:153 case ENUM::ClassID:154 case ENUM::Gamestate:155 case ENUM::Welcome:156 case ENUM::DeleteObjects:157 case ENUM::FunctionIDs:158 case ENUM::FunctionCalls:151 case Type::Acknowledgement: 152 case Type::Chat: 153 case Type::ClassID: 154 case Type::Gamestate: 155 case Type::Welcome: 156 case Type::DeleteObjects: 157 case Type::FunctionIDs: 158 case Type::FunctionCalls: 159 159 break; 160 160 default: … … 175 175 unsigned int clientID = ClientInformation::findClient(&peer->address)->getID(); 176 176 Packet *p = 0; 177 COUT(6) << "packet type: " << *( ENUM::Type *)&data[_PACKETID] << std::endl;178 switch( *( ENUM::Type *)(data + _PACKETID) )177 COUT(6) << "packet type: " << *(Type::Value *)&data[_PACKETID] << std::endl; 178 switch( *(Type::Value *)(data + _PACKETID) ) 179 179 { 180 case ENUM::Acknowledgement:180 case Type::Acknowledgement: 181 181 COUT(5) << "ack" << std::endl; 182 182 p = new Acknowledgement( data, clientID ); 183 183 break; 184 case ENUM::Chat:184 case Type::Chat: 185 185 COUT(5) << "chat" << std::endl; 186 186 p = new Chat( data, clientID ); 187 187 break; 188 case ENUM::ClassID:188 case Type::ClassID: 189 189 COUT(5) << "classid" << std::endl; 190 190 p = new ClassID( data, clientID ); 191 191 break; 192 case ENUM::Gamestate:192 case Type::Gamestate: 193 193 COUT(5) << "gamestate" << std::endl; 194 194 // TODO: remove brackets 195 195 p = new Gamestate( data, clientID ); 196 196 break; 197 case ENUM::Welcome:197 case Type::Welcome: 198 198 COUT(5) << "welcome" << std::endl; 199 199 p = new Welcome( data, clientID ); 200 200 break; 201 case ENUM::DeleteObjects:201 case Type::DeleteObjects: 202 202 COUT(5) << "deleteobjects" << std::endl; 203 203 p = new DeleteObjects( data, clientID ); 204 204 break; 205 case ENUM::FunctionCalls:205 case Type::FunctionCalls: 206 206 COUT(5) << "functionCalls" << std::endl; 207 207 p = new FunctionCalls( data, clientID ); 208 208 break; 209 case ENUM::FunctionIDs:209 case Type::FunctionIDs: 210 210 COUT(5) << "functionIDs" << std::endl; 211 211 p = new FunctionIDs( data, clientID ); -
code/trunk/src/network/packet/Packet.h
r3214 r3280 36 36 namespace packet{ 37 37 38 namespace ENUM{39 enum Direction{38 namespace Direction{ 39 enum Value{ 40 40 Incoming, 41 41 Outgoing, 42 42 Bidirectional 43 43 }; 44 enum Type{ 44 } 45 namespace Type{ 46 enum Value{ 45 47 Acknowledgement, 46 48 Chat, … … 84 86 uint32_t flags_; 85 87 unsigned int clientID_; 86 ENUM::DirectionpacketDirection_;88 Direction::Value packetDirection_; 87 89 /** Pointer to the data. Be careful when deleting it because it might 88 90 point to a location that was allocated by ENet. -
code/trunk/src/network/packet/Welcome.cc
r3214 r3280 41 41 #define PACKET_FLAGS_CLASSID PacketFlag::Reliable 42 42 #define _PACKETID 0 43 #define _CLIENTID _PACKETID + sizeof( ENUM::Type)43 #define _CLIENTID _PACKETID + sizeof(Type::Value) 44 44 #define _ENDIANTEST _CLIENTID + sizeof(uint32_t) 45 45 … … 51 51 data_=new uint8_t[ getSize() ]; 52 52 assert(data_); 53 *(packet:: ENUM::Type *)(data_ + _PACKETID ) = packet::ENUM::Welcome;53 *(packet::Type::Value *)(data_ + _PACKETID ) = packet::Type::Welcome; 54 54 *(uint32_t *)(data_ + _CLIENTID ) = static_cast<uint32_t>(clientID); 55 55 *(uint32_t *)(data_ + _ENDIANTEST ) = 0xFEDC4321; … … 70 70 71 71 unsigned int Welcome::getSize() const{ 72 return sizeof(packet:: ENUM::Type) + 2*sizeof(uint32_t);72 return sizeof(packet::Type::Value) + 2*sizeof(uint32_t); 73 73 } 74 74 -
code/trunk/src/network/synchronisable/Synchronisable.cc
r3214 r3280 65 65 this->dataSize_ = 0; 66 66 // set standard priority 67 this->setPriority( priority::normal );67 this->setPriority( Priority::Normal ); 68 68 69 69 // get creator id -
code/trunk/src/network/synchronisable/Synchronisable.h
r3214 r3280 51 51 { 52 52 53 namespace objectDirection{54 enum objectdirection{55 toclient=0x1,56 toserver=0x2,57 bidirectional=0x353 namespace ObjectDirection{ 54 enum Value{ 55 ToClient=0x1, 56 ToServer=0x2, 57 Bidirectional=0x3 58 58 }; 59 59 } 60 60 61 namespace priority{62 enum prio{63 very_high= -100,64 high = -15,65 normal = 0,66 low = 15,67 very_low= 10061 namespace Priority{ 62 enum Value{ 63 VeryHigh = -100, 64 High = -15, 65 Normal = 0, 66 Low = 15, 67 VeryLow = 100 68 68 }; 69 69 } -
code/trunk/src/network/synchronisable/SynchronisableVariable.h
r3214 r3280 41 41 namespace orxonox{ 42 42 43 namespace variableDirection{44 enum syncdirection{45 toclient=0x1,46 toserver=0x243 namespace VariableDirection{ 44 enum Value{ 45 ToClient=0x1, 46 ToServer=0x2 47 47 }; 48 enum bidirectional{ 49 serverMaster=0x1, 50 clientMaster=0x2 48 } 49 namespace Bidirectionality{ 50 enum Value{ 51 ServerMaster=0x1, 52 ClientMaster=0x2 51 53 }; 52 54 } … … 69 71 { 70 72 public: 71 SynchronisableVariable(T& variable, uint8_t syncDirection= variableDirection::toclient, NetworkCallbackBase *cb=0);73 SynchronisableVariable(T& variable, uint8_t syncDirection=VariableDirection::ToClient, NetworkCallbackBase *cb=0); 72 74 virtual ~SynchronisableVariable(); 73 75 … … 88 90 { 89 91 public: 90 SynchronisableVariableBidirectional(T& variable, uint8_t master= variableDirection::serverMaster, NetworkCallbackBase *cb=0);92 SynchronisableVariableBidirectional(T& variable, uint8_t master=Bidirectionality::ServerMaster, NetworkCallbackBase *cb=0); 91 93 virtual ~SynchronisableVariableBidirectional(); 92 94 -
code/trunk/src/orxonox/CMakeLists.txt
r3204 r3280 42 42 FIND_HEADER_FILES 43 43 TOLUA_FILES 44 LevelManager.h 44 45 gui/GUIManager.h 45 46 objects/pickup/BaseItem.h -
code/trunk/src/orxonox/CameraManager.cc
r3196 r3280 32 32 #include <OgreCompositorManager.h> 33 33 34 #include "util/String .h"34 #include "util/StringUtils.h" 35 35 #include "core/GameMode.h" 36 36 #include "core/ObjectList.h" -
code/trunk/src/orxonox/GraphicsManager.cc
r3196 r3280 38 38 #include <fstream> 39 39 #include <boost/filesystem.hpp> 40 #include <boost/shared_ptr.hpp> 40 41 41 42 #include <OgreCompositorManager.h> … … 53 54 #include "SpecialConfig.h" 54 55 #include "util/Exception.h" 55 #include "util/String .h"56 #include "util/StringUtils.h" 56 57 #include "util/SubString.h" 57 58 #include "core/Clock.h" … … 70 71 namespace orxonox 71 72 { 73 using boost::shared_ptr; 74 72 75 class _OrxonoxExport OgreWindowEventListener : public Ogre::WindowEventListener 73 76 { … … 89 92 , renderWindow_(0) 90 93 , viewport_(0) 91 , ogreWindowEventListener_( 0)94 , ogreWindowEventListener_(new OgreWindowEventListener()) 92 95 { 93 96 RegisterObject(GraphicsManager); … … 96 99 singletonRef_s = this; 97 100 98 this->loaded_ = false;99 100 101 this->setConfigValues(); 101 } 102 103 void GraphicsManager::initialise() 104 { 102 105 103 // Ogre setup procedure 106 104 setupOgre(); 107 // load all the required plugins for Ogre 108 loadOgrePlugins(); 109 // read resource declaration file 110 this->declareResources(); 111 // Reads ogre config and creates the render window 112 this->loadRenderer(); 113 114 // TODO: Spread this 115 this->initialiseResources(); 116 117 // add console commands 118 FunctorMember<GraphicsManager>* functor1 = createFunctor(&GraphicsManager::printScreen); 119 functor1->setObject(this); 120 ccPrintScreen_ = createConsoleCommand(functor1, "printScreen"); 121 CommandExecutor::addConsoleCommandShortcut(ccPrintScreen_); 122 123 this->loaded_ = true; 105 106 try 107 { 108 // load all the required plugins for Ogre 109 loadOgrePlugins(); 110 // read resource declaration file 111 this->declareResources(); 112 // Reads ogre config and creates the render window 113 this->loadRenderer(); 114 115 // TODO: Spread this 116 this->initialiseResources(); 117 118 // add console commands 119 FunctorMember<GraphicsManager>* functor1 = createFunctor(&GraphicsManager::printScreen); 120 functor1->setObject(this); 121 ccPrintScreen_ = createConsoleCommand(functor1, "printScreen"); 122 CommandExecutor::addConsoleCommandShortcut(ccPrintScreen_); 123 } 124 catch (...) 125 { 126 // clean up 127 delete this->ogreRoot_; 128 delete this->ogreLogger_; 129 delete this->ogreWindowEventListener_; 130 throw; 131 } 124 132 } 125 133 … … 130 138 GraphicsManager::~GraphicsManager() 131 139 { 132 if (this->loaded_) 133 { 134 delete this->ccPrintScreen_; 135 136 if (this->ogreWindowEventListener_) 137 { 138 // remove our WindowEventListener first to avoid bad calls after the window has been destroyed 139 Ogre::WindowEventUtilities::removeWindowEventListener(this->renderWindow_, this->ogreWindowEventListener_); 140 delete this->ogreWindowEventListener_; 141 } 142 143 // destroy render window 144 // Ogre::RenderSystem* renderer = this->ogreRoot_->getRenderSystem(); 145 // renderer->destroyRenderWindow("Orxonox"); 146 147 // HACK! This fixes an exit crash 148 Map::hackDestroyMap(); 149 150 // unload all compositors 151 Ogre::CompositorManager::getSingleton().removeAll(); 152 153 // Delete OGRE main control organ 154 delete this->ogreRoot_; 155 156 // delete the ogre log and the logManager (since we have created it in the first place). 157 this->ogreLogger_->getDefaultLog()->removeListener(this); 158 this->ogreLogger_->destroyLog(Ogre::LogManager::getSingleton().getDefaultLog()); 159 delete this->ogreLogger_; 160 } 140 /* 141 delete this->ccPrintScreen_; 142 */ 143 144 // HACK! This fixes an exit crash 145 Map::hackDestroyMap(); 146 // unload all compositors (this is only necessary because we don't yet destroy all resources!) 147 Ogre::CompositorManager::getSingleton().removeAll(); 148 149 // Delete OGRE main control organ 150 delete this->ogreRoot_; 151 152 // delete the logManager (since we have created it in the first place). 153 delete this->ogreLogger_; 154 155 delete this->ogreWindowEventListener_; 161 156 162 157 assert(singletonRef_s); … … 194 189 void GraphicsManager::update(const Clock& time) 195 190 { 196 if (this->loaded_) 197 { 198 Ogre::FrameEvent evt; 199 evt.timeSinceLastFrame = time.getDeltaTime(); 200 evt.timeSinceLastEvent = time.getDeltaTime(); // note: same time, but shouldn't matter anyway 201 202 // don't forget to call _fireFrameStarted to OGRE to make sure 203 // everything goes smoothly 204 ogreRoot_->_fireFrameStarted(evt); 205 206 // Pump messages in all registered RenderWindows 207 // This calls the WindowEventListener objects. 208 Ogre::WindowEventUtilities::messagePump(); 209 // make sure the window stays active even when not focused 210 // (probably only necessary on windows) 211 this->renderWindow_->setActive(true); 212 213 // render 214 ogreRoot_->_updateAllRenderTargets(); 215 216 // again, just to be sure OGRE works fine 217 ogreRoot_->_fireFrameEnded(evt); // note: uses the same time as _fireFrameStarted 218 } 191 Ogre::FrameEvent evt; 192 evt.timeSinceLastFrame = time.getDeltaTime(); 193 evt.timeSinceLastEvent = time.getDeltaTime(); // note: same time, but shouldn't matter anyway 194 195 // don't forget to call _fireFrameStarted to OGRE to make sure 196 // everything goes smoothly 197 ogreRoot_->_fireFrameStarted(evt); 198 199 // Pump messages in all registered RenderWindows 200 // This calls the WindowEventListener objects. 201 Ogre::WindowEventUtilities::messagePump(); 202 // make sure the window stays active even when not focused 203 // (probably only necessary on windows) 204 this->renderWindow_->setActive(true); 205 206 // render 207 ogreRoot_->_updateAllRenderTargets(); 208 209 // again, just to be sure OGRE works fine 210 ogreRoot_->_fireFrameEnded(evt); // note: uses the same time as _fireFrameStarted 219 211 } 220 212 … … 248 240 // create a new logManager 249 241 // Ogre::Root will detect that we've already created a Log 250 ogreLogger_ = new Ogre::LogManager();242 std::auto_ptr<Ogre::LogManager> logger(new Ogre::LogManager()); 251 243 COUT(4) << "Ogre LogManager created" << std::endl; 252 244 253 245 // create our own log that we can listen to 254 246 Ogre::Log *myLog; 255 myLog = ogreLogger_->createLog(ogreLogFilepath.string(), true, false, false);247 myLog = logger->createLog(ogreLogFilepath.string(), true, false, false); 256 248 COUT(4) << "Ogre Log created" << std::endl; 257 249 … … 272 264 // Leave plugins file empty. We're going to do that part manually later 273 265 ogreRoot_ = new Ogre::Root("", ogreConfigFilepath.string(), ogreLogFilepath.string()); 266 // In case that new Root failed the logger gets destroyed because of the std::auto_ptr 267 ogreLogger_ = logger.release(); 274 268 275 269 COUT(3) << "Ogre set up done." << std::endl; … … 348 342 if (!ogreRoot_->restoreConfig()) 349 343 if (!ogreRoot_->showConfigDialog()) 350 ThrowException(InitialisationFailed, " Could not show Ogre configuration dialogue.");344 ThrowException(InitialisationFailed, "OGRE graphics configuration dialogue failed."); 351 345 352 346 CCOUT(4) << "Creating render window" << std::endl; … … 354 348 this->renderWindow_ = ogreRoot_->initialise(true, "Orxonox"); 355 349 356 this->ogreWindowEventListener_ = new OgreWindowEventListener();357 350 Ogre::WindowEventUtilities::addWindowEventListener(this->renderWindow_, ogreWindowEventListener_); 358 351 -
code/trunk/src/orxonox/GraphicsManager.h
r3196 r3280 57 57 58 58 void setConfigValues(); 59 void initialise();60 59 61 60 void update(const Clock& time); … … 93 92 94 93 private: 95 bool loaded_;96 97 94 Ogre::Root* ogreRoot_; //!< Ogre's root 98 95 Ogre::LogManager* ogreLogger_; 99 96 Ogre::RenderWindow* renderWindow_; //!< the one and only render window 100 97 Ogre::Viewport* viewport_; //!< default full size viewport 101 OgreWindowEventListener* ogreWindowEventListener_; 98 OgreWindowEventListener* ogreWindowEventListener_; //!< Pimpl to hide OgreWindowUtilities.h 102 99 103 100 // config values -
code/trunk/src/orxonox/LevelManager.cc
r3196 r3280 30 30 31 31 #include <map> 32 33 #include "core/CommandLine.h" 34 #include "core/ConfigValueIncludes.h" 35 #include "core/CoreIncludes.h" 32 36 #include "PlayerManager.h" 33 37 #include "objects/Level.h" … … 36 40 namespace orxonox 37 41 { 42 SetCommandLineArgument(level, "").shortcut("l").information("Default level file (overrides LevelManager::defaultLevelName_ configValue)"); 43 38 44 LevelManager* LevelManager::singletonRef_s = 0; 39 45 … … 42 48 assert(singletonRef_s == 0); 43 49 singletonRef_s = this; 50 51 RegisterRootObject(LevelManager); 52 this->setConfigValues(); 53 54 // check override 55 if (!CommandLine::getArgument("level")->hasDefaultValue()) 56 { 57 ModifyConfigValue(defaultLevelName_, tset, CommandLine::getValue("level").getString()); 58 } 44 59 } 45 60 … … 48 63 assert(singletonRef_s != 0); 49 64 singletonRef_s = 0; 65 } 66 67 void LevelManager::setConfigValues() 68 { 69 SetConfigValue(defaultLevelName_, "presentation_dm.oxw") 70 .description("Sets the preselection of the level in the main menu."); 50 71 } 51 72 … … 93 114 } 94 115 } 116 117 void LevelManager::setDefaultLevel(const std::string& levelName) 118 { 119 ModifyConfigValue(defaultLevelName_, set, levelName); 120 } 121 122 const std::string& LevelManager::getDefaultLevel() 123 { 124 return defaultLevelName_; 125 } 95 126 } -
code/trunk/src/orxonox/LevelManager.h
r3196 r3280 34 34 #include <cassert> 35 35 #include <list> 36 #include "core/OrxonoxClass.h" 36 37 38 // tolua_begin 37 39 namespace orxonox 38 40 { 39 41 class _OrxonoxExport LevelManager 40 { 42 // tolua_end 43 : public OrxonoxClass 44 { // tolua_export 41 45 public: 42 46 LevelManager(); 43 47 virtual ~LevelManager(); 48 49 void setConfigValues(); 44 50 45 51 void requestActivity(Level* level); … … 47 53 Level* getActiveLevel(); 48 54 55 void setDefaultLevel(const std::string& levelName); //tolua_export 56 const std::string& getDefaultLevel(); //tolua_export 57 49 58 static LevelManager* getInstancePtr() { return singletonRef_s; } 50 static LevelManager& getInstance() { assert(singletonRef_s); return *singletonRef_s; } 59 static LevelManager& getInstance() { assert(singletonRef_s); return *singletonRef_s; } // tolua_export 51 60 52 61 private: … … 57 66 std::list<Level*> levels_s; 58 67 68 // config values 69 std::string defaultLevelName_; 70 59 71 static LevelManager* singletonRef_s; 60 }; 61 } 72 }; // tolua_export 73 } // tolua_export 62 74 63 75 #endif /* _LevelManager_H__ */ -
code/trunk/src/orxonox/Main.cc
r3196 r3280 37 37 38 38 #include "util/Debug.h" 39 #include " core/Identifier.h"39 #include "util/Exception.h" 40 40 #include "core/Game.h" 41 41 … … 50 50 #endif 51 51 { 52 using namespace orxonox; 53 54 Game* game = 0; 55 try 52 56 { 53 orxonox::Game orxonox(argc, argv);57 game = new Game(argc, argv); 54 58 55 orxonox.setStateHierarchy(59 game->setStateHierarchy( 56 60 "root" 57 61 " graphics" … … 68 72 ); 69 73 70 orxonox.run(); 74 game->requestState("root"); 75 } 76 catch (const std::exception& ex) 77 { 78 COUT(0) << "Orxonox failed to initialise: " << ex.what() << std::endl; 79 COUT(0) << "Terminating program." << std::endl; 80 return 1; 81 } 82 catch (...) 83 { 84 COUT(0) << "Orxonox failed to initialise: " << std::endl; 85 COUT(0) << "Terminating program." << std::endl; 86 return 1; 87 } 71 88 72 // destroy the GameStates created pre-mainly 73 orxonox::Game::destroyStates(); 74 } // orxonox gets destroyed right here! 75 76 // Clean up class hierarchy stuff (identifiers, xmlport, configvalue, consolecommand) 77 // Needs to be done after Game destructor because of ~OrxonoxClass 78 orxonox::Identifier::destroyAllIdentifiers(); 89 game->run(); 90 delete game; 79 91 80 92 return 0; -
code/trunk/src/orxonox/OrxonoxPrereqs.h
r3196 r3280 65 65 namespace LODParticle 66 66 { 67 enum LOD67 enum Value 68 68 { 69 off = 0,70 low = 1,71 normal = 2,72 high = 369 Off = 0, 70 Low = 1, 71 Normal = 2, 72 High = 3 73 73 }; 74 74 } … … 295 295 { 296 296 class DefaultLogger; 297 class Logger; 297 298 class LuaScriptModule; 298 299 -
code/trunk/src/orxonox/gamestates/GSClient.cc
r3196 r3280 38 38 namespace orxonox 39 39 { 40 AddGameState(GSClient, "client");40 DeclareGameState(GSClient, "client", false, true); 41 41 42 SetCommandLineArgument(ip, "127.0.0.1").information(" #.#.#.#");42 SetCommandLineArgument(ip, "127.0.0.1").information("Sever IP as strin in the form #.#.#.#"); 43 43 44 GSClient::GSClient(const std::string& name)45 : GameState( name)44 GSClient::GSClient(const GameStateConstrParams& params) 45 : GameState(params) 46 46 , client_(0) 47 47 { -
code/trunk/src/orxonox/gamestates/GSClient.h
r3196 r3280 40 40 { 41 41 public: 42 GSClient(const std::string& name);42 GSClient(const GameStateConstrParams& params); 43 43 ~GSClient(); 44 44 -
code/trunk/src/orxonox/gamestates/GSDedicated.cc
r3205 r3280 51 51 const unsigned int MAX_COMMAND_LENGTH = 255; 52 52 53 AddGameState(GSDedicated, "dedicated");53 DeclareGameState(GSDedicated, "dedicated", false, false); 54 54 55 55 termios* GSDedicated::originalTerminalSettings_; 56 56 57 GSDedicated::GSDedicated(const std::string& name)58 : GameState( name)57 GSDedicated::GSDedicated(const GameStateConstrParams& params) 58 : GameState(params) 59 59 , server_(0) 60 60 , timeSinceLastUpdate_(0) -
code/trunk/src/orxonox/gamestates/GSDedicated.h
r3198 r3280 48 48 { 49 49 public: 50 GSDedicated(const std::string& name);50 GSDedicated(const GameStateConstrParams& params); 51 51 ~GSDedicated(); 52 52 -
code/trunk/src/orxonox/gamestates/GSGraphics.cc
r3196 r3280 57 57 namespace orxonox 58 58 { 59 AddGameState(GSGraphics, "graphics", false);60 61 GSGraphics::GSGraphics(const std::string& name, bool countTickTime)62 : GameState( name, countTickTime)59 DeclareGameState(GSGraphics, "graphics", true, true); 60 61 GSGraphics::GSGraphics(const GameStateConstrParams& params) 62 : GameState(params) 63 63 , inputManager_(0) 64 64 , console_(0) … … 108 108 setConfigValues(); 109 109 110 // initialise graphics manager. Doesn't load the render window yet!110 // Load OGRE including the render window 111 111 this->graphicsManager_ = new GraphicsManager(); 112 this->graphicsManager_->initialise();113 112 114 113 // load debug overlay … … 198 197 void GSGraphics::toggleGUI() 199 198 { 200 199 GUIManager::getInstance().executeCode("toggleGUI()"); 201 200 } 202 201 -
code/trunk/src/orxonox/gamestates/GSGraphics.h
r3196 r3280 52 52 { 53 53 public: 54 GSGraphics(const std::string& name, bool countTickTime);54 GSGraphics(const GameStateConstrParams& params); 55 55 ~GSGraphics(); 56 56 void setConfigValues(); -
code/trunk/src/orxonox/gamestates/GSIOConsole.cc
r3196 r3280 36 36 namespace orxonox 37 37 { 38 AddGameState(GSIOConsole, "ioConsole");38 DeclareGameState(GSIOConsole, "ioConsole", false, false); 39 39 40 GSIOConsole::GSIOConsole(const std::string& name)41 : GameState( name)40 GSIOConsole::GSIOConsole(const GameStateConstrParams& params) 41 : GameState(params) 42 42 { 43 43 } -
code/trunk/src/orxonox/gamestates/GSIOConsole.h
r2896 r3280 38 38 { 39 39 public: 40 GSIOConsole(const std::string& name);40 GSIOConsole(const GameStateConstrParams& params); 41 41 ~GSIOConsole(); 42 42 -
code/trunk/src/orxonox/gamestates/GSLevel.cc
r3196 r3280 34 34 #include "core/input/KeyBinder.h" 35 35 #include "core/Clock.h" 36 #include "core/CommandLine.h"37 36 #include "core/ConsoleCommand.h" 38 37 #include "core/ConfigValueIncludes.h" … … 56 55 namespace orxonox 57 56 { 58 AddGameState(GSLevel, "level"); 59 60 SetCommandLineArgument(level, "").shortcut("l"); 57 DeclareGameState(GSLevel, "level", false, true); 61 58 SetConsoleCommand(GSLevel, showIngameGUI, true); 62 59 63 60 XMLFile* GSLevel::startFile_s = NULL; 64 61 65 GSLevel::GSLevel(const std::string& name)66 : GameState( name)62 GSLevel::GSLevel(const GameStateConstrParams& params) 63 : GameState(params) 67 64 , keyBinder_(0) 68 65 , gameInputState_(0) … … 71 68 , radar_(0) 72 69 , cameraManager_(0) 73 , levelManager_(0)74 70 { 75 71 RegisterObject(GSLevel); … … 120 116 if (GameMode::isMaster()) 121 117 { 122 // create the global LevelManager123 this->levelManager_ = new LevelManager();124 125 118 this->loadLevel(); 126 119 } … … 202 195 } 203 196 204 if (this->levelManager_)205 {206 delete this->levelManager_;207 this->levelManager_ = 0;208 }209 210 197 if (this->playerManager_) 211 198 { … … 252 239 // call the loader 253 240 COUT(0) << "Loading level..." << std::endl; 254 std::string levelName; 255 CommandLine::getValue("level", &levelName); 256 if (levelName == "") 257 startFile_s = new XMLFile(Core::getMediaPathString() + "levels" + '/' + Game::getInstance().getLevel()); 258 else 259 startFile_s = new XMLFile(Core::getMediaPathString() + "levels" + '/' + levelName); 241 startFile_s = new XMLFile(Core::getMediaPathString() + "levels" + '/' + LevelManager::getInstance().getDefaultLevel()); 260 242 Loader::open(startFile_s); 261 243 } -
code/trunk/src/orxonox/gamestates/GSLevel.h
r3196 r3280 41 41 { 42 42 public: 43 GSLevel(const std::string& name);43 GSLevel(const GameStateConstrParams& params); 44 44 ~GSLevel(); 45 45 void setConfigValues(); … … 68 68 Radar* radar_; //!< represents the Radar (not the HUD part) 69 69 CameraManager* cameraManager_; //!< camera manager for this level 70 LevelManager* levelManager_; //!< global level manager71 70 PlayerManager* playerManager_; //!< player manager for this level 72 71 QuestManager* questManager_; -
code/trunk/src/orxonox/gamestates/GSMainMenu.cc
r3196 r3280 43 43 namespace orxonox 44 44 { 45 AddGameState(GSMainMenu, "mainMenu");45 DeclareGameState(GSMainMenu, "mainMenu", false, true); 46 46 47 GSMainMenu::GSMainMenu(const std::string& name)48 : GameState( name)47 GSMainMenu::GSMainMenu(const GameStateConstrParams& params) 48 : GameState(params) 49 49 , inputState_(0) 50 50 { … … 67 67 68 68 // show main menu 69 GUIManager::getInstance().showGUI("mainmenu_ 2");69 GUIManager::getInstance().showGUI("mainmenu_3"); 70 70 GUIManager::getInstance().setCamera(this->camera_); 71 71 GraphicsManager::getInstance().setCamera(this->camera_); -
code/trunk/src/orxonox/gamestates/GSMainMenu.h
r3196 r3280 40 40 { 41 41 public: 42 GSMainMenu(const std::string& name);42 GSMainMenu(const GameStateConstrParams& params); 43 43 ~GSMainMenu(); 44 44 -
code/trunk/src/orxonox/gamestates/GSRoot.cc
r3196 r3280 37 37 #include "interfaces/TimeFactorListener.h" 38 38 #include "interfaces/Tickable.h" 39 #include "LevelManager.h" 39 40 40 41 namespace orxonox 41 42 { 42 AddGameState(GSRoot, "root", false);43 SetCommandLineSwitch(console) ;43 DeclareGameState(GSRoot, "root", true, false); 44 SetCommandLineSwitch(console).information("Start in console mode (text IO only)"); 44 45 // Shortcuts for easy direct loading 45 SetCommandLineSwitch(server) ;46 SetCommandLineSwitch(client) ;47 SetCommandLineSwitch(dedicated) ;48 SetCommandLineSwitch(standalone) ;49 50 GSRoot::GSRoot(const std::string& name, bool countTickTime)51 : GameState( name, countTickTime)46 SetCommandLineSwitch(server).information("Start in server mode"); 47 SetCommandLineSwitch(client).information("Start in client mode"); 48 SetCommandLineSwitch(dedicated).information("Start in dedicated server mode"); 49 SetCommandLineSwitch(standalone).information("Start in standalone mode"); 50 51 GSRoot::GSRoot(const GameStateConstrParams& params) 52 : GameState(params) 52 53 , timeFactor_(1.0f) 53 54 , bPaused_(false) … … 83 84 } 84 85 86 // create the global LevelManager 87 this->levelManager_ = new LevelManager(); 88 85 89 // Load level directly? 86 90 bool loadLevel = false; … … 129 133 } 130 134 */ 135 136 delete this->levelManager_; 131 137 } 132 138 -
code/trunk/src/orxonox/gamestates/GSRoot.h
r3196 r3280 38 38 { 39 39 public: 40 GSRoot(const std::string& name, bool countTickTime);40 GSRoot(const GameStateConstrParams& params); 41 41 ~GSRoot(); 42 42 … … 52 52 53 53 private: 54 float timeFactor_; //!< A factor that sets the gamespeed. 1 is normal.54 float timeFactor_; //!< A factor that sets the gamespeed. 1 is normal. 55 55 bool bPaused_; 56 56 float timeFactorPauseBackup_; 57 58 LevelManager* levelManager_; //!< global level manager 57 59 58 60 // console commands -
code/trunk/src/orxonox/gamestates/GSServer.cc
r3196 r3280 37 37 namespace orxonox 38 38 { 39 AddGameState(GSServer, "server");39 DeclareGameState(GSServer, "server", false, true); 40 40 41 SetCommandLineArgument(port, 55556).shortcut("p").information(" 0-65535");41 SetCommandLineArgument(port, 55556).shortcut("p").information("Network communication port to be used 0-65535 (default: 55556)"); 42 42 43 GSServer::GSServer(const std::string& name)44 : GameState( name)43 GSServer::GSServer(const GameStateConstrParams& params) 44 : GameState(params) 45 45 , server_(0) 46 46 { -
code/trunk/src/orxonox/gamestates/GSServer.h
r3196 r3280 40 40 { 41 41 public: 42 GSServer(const std::string& name);42 GSServer(const GameStateConstrParams& params); 43 43 ~GSServer(); 44 44 -
code/trunk/src/orxonox/gamestates/GSStandalone.cc
r3196 r3280 34 34 namespace orxonox 35 35 { 36 AddGameState(GSStandalone, "standalone");36 DeclareGameState(GSStandalone, "standalone", false, true); 37 37 38 GSStandalone::GSStandalone(const std::string& name)39 : GameState( name)38 GSStandalone::GSStandalone(const GameStateConstrParams& params) 39 : GameState(params) 40 40 { 41 41 } -
code/trunk/src/orxonox/gamestates/GSStandalone.h
r2896 r3280 38 38 { 39 39 public: 40 GSStandalone(const std::string& name);40 GSStandalone(const GameStateConstrParams& params); 41 41 ~GSStandalone(); 42 42 -
code/trunk/src/orxonox/gui/GUIManager.cc
r3196 r3280 53 53 #endif 54 54 55 #include "util/Debug.h" 55 56 #include "util/Exception.h" 57 #include "util/OrxAssert.h" 56 58 #include "core/Core.h" 57 59 #include "core/Clock.h" … … 62 64 namespace orxonox 63 65 { 66 class CEGUILogger : public CEGUI::DefaultLogger 67 { 68 public: 69 void logEvent(const CEGUI::String& message, CEGUI::LoggingLevel level = CEGUI::Standard) 70 { 71 int orxonoxLevel; 72 switch (level) 73 { 74 case CEGUI::Errors: orxonoxLevel = 1; break; 75 case CEGUI::Warnings: orxonoxLevel = 2; break; 76 case CEGUI::Standard: orxonoxLevel = 4; break; 77 case CEGUI::Informative: orxonoxLevel = 5; break; 78 case CEGUI::Insane: orxonoxLevel = 6; break; 79 default: OrxAssert(false, "CEGUI log level out of range, inpect immediately!"); 80 } 81 OutputHandler::getOutStream().setOutputLevel(orxonoxLevel) 82 << "CEGUI: " << message << std::endl; 83 84 CEGUI::DefaultLogger::logEvent(message, level); 85 } 86 }; 87 64 88 static CEGUI::MouseButton convertButton(MouseButtonCode::ByEnum button); 65 89 GUIManager* GUIManager::singletonRef_s = 0; … … 140 164 141 165 // Create our own logger to specify the filepath 142 this->ceguiLogger_ = new DefaultLogger();166 this->ceguiLogger_ = new CEGUILogger(); 143 167 this->ceguiLogger_->setLogFilename(Core::getLogPathString() + "cegui.log"); 144 168 // set the log level according to ours (translate by subtracting 1) -
code/trunk/src/orxonox/gui/GUIManager.h
r3196 r3280 123 123 CEGUI::ResourceProvider* resourceProvider_; //!< CEGUI's resource provider 124 124 CEGUI::LuaScriptModule* scriptModule_; //!< CEGUI's script module to use Lua 125 CEGUI:: DefaultLogger*ceguiLogger_; //!< CEGUI's logger to be able to log CEGUI errors in our log125 CEGUI::Logger* ceguiLogger_; //!< CEGUI's logger to be able to log CEGUI errors in our log 126 126 CEGUI::System* guiSystem_; //!< CEGUI's main system 127 127 lua_State* luaState_; //!< Lua state, access point to the Lua engine -
code/trunk/src/orxonox/interfaces/RadarViewable.cc
r3196 r3280 33 33 #include <OgreEntity.h> 34 34 35 #include "util/String .h"35 #include "util/StringUtils.h" 36 36 #include "core/CoreIncludes.h" 37 37 #include "tools/DynamicLines.h" -
code/trunk/src/orxonox/interfaces/TeamColourable.h
- Property svn:mergeinfo changed (with no actual effect on merging)
-
code/trunk/src/orxonox/objects/GlobalShader.cc
r3196 r3280 66 66 void GlobalShader::registerVariables() 67 67 { 68 registerVariable(this->bVisible_, variableDirection::toclient, new NetworkCallback<GlobalShader>(this, &GlobalShader::changedVisibility));69 registerVariable(const_cast<std::string&>(this->shader_.getCompositor()), variableDirection::toclient, new NetworkCallback<Shader>(&this->shader_, &Shader::changedCompositor));68 registerVariable(this->bVisible_, VariableDirection::ToClient, new NetworkCallback<GlobalShader>(this, &GlobalShader::changedVisibility)); 69 registerVariable(const_cast<std::string&>(this->shader_.getCompositor()), VariableDirection::ToClient, new NetworkCallback<Shader>(&this->shader_, &Shader::changedCompositor)); 70 70 } 71 71 -
code/trunk/src/orxonox/objects/Level.cc
r3196 r3280 87 87 void Level::registerVariables() 88 88 { 89 registerVariable(this->xmlfilename_, variableDirection::toclient, new NetworkCallback<Level>(this, &Level::networkcallback_applyXMLFile));90 registerVariable(this->name_, variableDirection::toclient, new NetworkCallback<Level>(this, &Level::changedName));91 registerVariable(this->description_, variableDirection::toclient);89 registerVariable(this->xmlfilename_, VariableDirection::ToClient, new NetworkCallback<Level>(this, &Level::networkcallback_applyXMLFile)); 90 registerVariable(this->name_, VariableDirection::ToClient, new NetworkCallback<Level>(this, &Level::changedName)); 91 registerVariable(this->description_, VariableDirection::ToClient); 92 92 } 93 93 -
code/trunk/src/orxonox/objects/Scene.cc
r3196 r3280 115 115 void Scene::registerVariables() 116 116 { 117 registerVariable(this->skybox_, variableDirection::toclient, new NetworkCallback<Scene>(this, &Scene::networkcallback_applySkybox));118 registerVariable(this->ambientLight_, variableDirection::toclient, new NetworkCallback<Scene>(this, &Scene::networkcallback_applyAmbientLight));119 registerVariable(this->negativeWorldRange_, variableDirection::toclient, new NetworkCallback<Scene>(this, &Scene::networkcallback_negativeWorldRange));120 registerVariable(this->positiveWorldRange_, variableDirection::toclient, new NetworkCallback<Scene>(this, &Scene::networkcallback_positiveWorldRange));121 registerVariable(this->gravity_, variableDirection::toclient, new NetworkCallback<Scene>(this, &Scene::networkcallback_gravity));122 registerVariable(this->bHasPhysics_, variableDirection::toclient, new NetworkCallback<Scene>(this, &Scene::networkcallback_hasPhysics));123 registerVariable(this->bShadows_, variableDirection::toclient, new NetworkCallback<Scene>(this, &Scene::networkcallback_applyShadows));117 registerVariable(this->skybox_, VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_applySkybox)); 118 registerVariable(this->ambientLight_, VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_applyAmbientLight)); 119 registerVariable(this->negativeWorldRange_, VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_negativeWorldRange)); 120 registerVariable(this->positiveWorldRange_, VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_positiveWorldRange)); 121 registerVariable(this->gravity_, VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_gravity)); 122 registerVariable(this->bHasPhysics_, VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_hasPhysics)); 123 registerVariable(this->bShadows_, VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_applyShadows)); 124 124 } 125 125 -
code/trunk/src/orxonox/objects/collisionshapes/BoxCollisionShape.cc
r3196 r3280 57 57 void BoxCollisionShape::registerVariables() 58 58 { 59 registerVariable(this->halfExtents_, variableDirection::toclient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape));59 registerVariable(this->halfExtents_, VariableDirection::ToClient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape)); 60 60 } 61 61 -
code/trunk/src/orxonox/objects/collisionshapes/CollisionShape.cc
r3196 r3280 77 77 void CollisionShape::registerVariables() 78 78 { 79 registerVariable(this->parentID_, variableDirection::toclient, new NetworkCallback<CollisionShape>(this, &CollisionShape::parentChanged));79 registerVariable(this->parentID_, VariableDirection::ToClient, new NetworkCallback<CollisionShape>(this, &CollisionShape::parentChanged)); 80 80 } 81 81 -
code/trunk/src/orxonox/objects/collisionshapes/ConeCollisionShape.cc
r3196 r3280 57 57 void ConeCollisionShape::registerVariables() 58 58 { 59 registerVariable(this->radius_, variableDirection::toclient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape));60 registerVariable(this->height_, variableDirection::toclient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape));59 registerVariable(this->radius_, VariableDirection::ToClient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape)); 60 registerVariable(this->height_, VariableDirection::ToClient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape)); 61 61 } 62 62 -
code/trunk/src/orxonox/objects/collisionshapes/PlaneCollisionShape.cc
r3196 r3280 58 58 void PlaneCollisionShape::registerVariables() 59 59 { 60 registerVariable(this->normal_, variableDirection::toclient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape));61 registerVariable(this->offset_, variableDirection::toclient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape));60 registerVariable(this->normal_, VariableDirection::ToClient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape)); 61 registerVariable(this->offset_, VariableDirection::ToClient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape)); 62 62 } 63 63 -
code/trunk/src/orxonox/objects/collisionshapes/SphereCollisionShape.cc
r3196 r3280 56 56 void SphereCollisionShape::registerVariables() 57 57 { 58 registerVariable(this->radius_, variableDirection::toclient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape));58 registerVariable(this->radius_, VariableDirection::ToClient, new NetworkCallback<CollisionShape>(this, &CollisionShape::updateShape)); 59 59 } 60 60 -
code/trunk/src/orxonox/objects/controllers/ArtificialController.cc
r3196 r3280 208 208 switch (base->getState()) 209 209 { 210 case BaseState:: controlTeam1:210 case BaseState::ControlTeam1: 211 211 team1 = 0; 212 212 break; 213 case BaseState:: controlTeam2:213 case BaseState::ControlTeam2: 214 214 team1 = 1; 215 215 break; 216 case BaseState:: uncontrolled:216 case BaseState::Uncontrolled: 217 217 default: 218 218 team1 = -1; … … 224 224 switch (base->getState()) 225 225 { 226 case BaseState:: controlTeam1:226 case BaseState::ControlTeam1: 227 227 team2 = 0; 228 228 break; 229 case BaseState:: controlTeam2:229 case BaseState::ControlTeam2: 230 230 team2 = 1; 231 231 break; 232 case BaseState:: uncontrolled:232 case BaseState::Uncontrolled: 233 233 default: 234 234 team2 = -1; -
code/trunk/src/orxonox/objects/gametypes/Gametype.h
r3196 r3280 45 45 namespace PlayerState 46 46 { 47 enum Enum47 enum Value 48 48 { 49 49 Uninitialized, … … 57 57 { 58 58 PlayerInfo* info_; 59 PlayerState:: Enumstate_;59 PlayerState::Value state_; 60 60 int frags_; 61 61 int killed_; -
code/trunk/src/orxonox/objects/gametypes/TeamBaseMatch.cc
r3196 r3280 66 66 if (teamnr == 0) 67 67 { 68 base->setState(BaseState:: controlTeam1);68 base->setState(BaseState::ControlTeam1); 69 69 this->gtinfo_.sendAnnounceMessage("The red team captured a base"); 70 70 } 71 71 if (teamnr == 1) 72 72 { 73 base->setState(BaseState:: controlTeam2);73 base->setState(BaseState::ControlTeam2); 74 74 this->gtinfo_.sendAnnounceMessage("The blue team captured a base"); 75 75 } … … 107 107 switch (base->getState()) 108 108 { 109 case BaseState:: controlTeam1:109 case BaseState::ControlTeam1: 110 110 teamnrbase = 0; 111 111 break; 112 case BaseState:: controlTeam2:112 case BaseState::ControlTeam2: 113 113 teamnrbase = 1; 114 114 break; 115 case BaseState:: uncontrolled:115 case BaseState::Uncontrolled: 116 116 default: 117 117 teamnrbase = -1; … … 155 155 for (std::set<TeamBaseMatchBase*>::const_iterator it = this->bases_.begin(); it != this->bases_.end(); ++it) 156 156 { 157 if((*it)->getState() == BaseState:: controlTeam1)157 if((*it)->getState() == BaseState::ControlTeam1) 158 158 { 159 159 amountControlled++; 160 160 } 161 if((*it)->getState() == BaseState:: controlTeam2)161 if((*it)->getState() == BaseState::ControlTeam2) 162 162 { 163 163 amountControlled2++; … … 241 241 for (std::set<TeamBaseMatchBase*>::const_iterator it = this->bases_.begin(); it != this->bases_.end(); ++it) 242 242 { 243 if ((*it)->getState() == BaseState:: controlTeam1 && team == 0)243 if ((*it)->getState() == BaseState::ControlTeam1 && team == 0) 244 244 count++; 245 if ((*it)->getState() == BaseState:: controlTeam2 && team == 1)245 if ((*it)->getState() == BaseState::ControlTeam2 && team == 1) 246 246 count++; 247 247 } … … 253 253 { 254 254 this->bases_.insert(base); 255 base->setState(BaseState:: uncontrolled);255 base->setState(BaseState::Uncontrolled); 256 256 } 257 257 -
code/trunk/src/orxonox/objects/gametypes/UnderAttack.cc
r3196 r3280 173 173 if ( gameTime_ <= timesequence_ && gameTime_ > 0) 174 174 { 175 std::string message = convertToString(timesequence_) + " seconds left!";175 std::string message = multi_cast<std::string>(timesequence_) + " seconds left!"; 176 176 /* 177 177 COUT(0) << message << std::endl; -
code/trunk/src/orxonox/objects/infos/GametypeInfo.cc
r3196 r3280 61 61 void GametypeInfo::registerVariables() 62 62 { 63 registerVariable(this->bStarted_, variableDirection::toclient);64 registerVariable(this->bEnded_, variableDirection::toclient);65 registerVariable(this->startCountdown_, variableDirection::toclient);66 registerVariable(this->bStartCountdownRunning_, variableDirection::toclient);67 registerVariable(this->hudtemplate_, variableDirection::toclient);63 registerVariable(this->bStarted_, VariableDirection::ToClient); 64 registerVariable(this->bEnded_, VariableDirection::ToClient); 65 registerVariable(this->startCountdown_, VariableDirection::ToClient); 66 registerVariable(this->bStartCountdownRunning_, VariableDirection::ToClient); 67 registerVariable(this->hudtemplate_, VariableDirection::ToClient); 68 68 } 69 69 -
code/trunk/src/orxonox/objects/infos/HumanPlayer.cc
r3196 r3280 79 79 void HumanPlayer::registerVariables() 80 80 { 81 registerVariable(this->synchronize_nick_, variableDirection::toserver, new NetworkCallback<HumanPlayer>(this, &HumanPlayer::networkcallback_changednick));81 registerVariable(this->synchronize_nick_, VariableDirection::ToServer, new NetworkCallback<HumanPlayer>(this, &HumanPlayer::networkcallback_changednick)); 82 82 83 registerVariable(this->clientID_, variableDirection::toclient, new NetworkCallback<HumanPlayer>(this, &HumanPlayer::networkcallback_clientIDchanged));84 registerVariable(this->server_initialized_, variableDirection::toclient, new NetworkCallback<HumanPlayer>(this, &HumanPlayer::networkcallback_server_initialized));85 registerVariable(this->client_initialized_, variableDirection::toserver, new NetworkCallback<HumanPlayer>(this, &HumanPlayer::networkcallback_client_initialized));83 registerVariable(this->clientID_, VariableDirection::ToClient, new NetworkCallback<HumanPlayer>(this, &HumanPlayer::networkcallback_clientIDchanged)); 84 registerVariable(this->server_initialized_, VariableDirection::ToClient, new NetworkCallback<HumanPlayer>(this, &HumanPlayer::networkcallback_server_initialized)); 85 registerVariable(this->client_initialized_, VariableDirection::ToServer, new NetworkCallback<HumanPlayer>(this, &HumanPlayer::networkcallback_client_initialized)); 86 86 } 87 87 … … 116 116 117 117 if (!GameMode::isMaster()) 118 this->setObjectMode( objectDirection::bidirectional);118 this->setObjectMode(ObjectDirection::Bidirectional); 119 119 else 120 120 this->setName(this->nick_); -
code/trunk/src/orxonox/objects/infos/PlayerInfo.cc
r3196 r3280 77 77 void PlayerInfo::registerVariables() 78 78 { 79 registerVariable(this->name_, variableDirection::toclient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::changedName));80 registerVariable(this->controllableEntityID_, variableDirection::toclient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::networkcallback_changedcontrollableentityID));81 registerVariable(this->bReadyToSpawn_, variableDirection::toserver);82 registerVariable(this->gtinfoID_, variableDirection::toclient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::networkcallback_changedgtinfoID));79 registerVariable(this->name_, VariableDirection::ToClient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::changedName)); 80 registerVariable(this->controllableEntityID_, VariableDirection::ToClient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::networkcallback_changedcontrollableentityID)); 81 registerVariable(this->bReadyToSpawn_, VariableDirection::ToServer); 82 registerVariable(this->gtinfoID_, VariableDirection::ToClient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::networkcallback_changedgtinfoID)); 83 83 } 84 84 -
code/trunk/src/orxonox/objects/items/Engine.cc
r3196 r3280 113 113 void Engine::registerVariables() 114 114 { 115 registerVariable(this->shipID_, variableDirection::toclient, new NetworkCallback<Engine>(this, &Engine::networkcallback_shipID));116 117 registerVariable(this->speedFactor_, variableDirection::toclient);118 registerVariable(this->boostFactor_, variableDirection::toclient);119 120 registerVariable(this->maxSpeedFront_, variableDirection::toclient);121 registerVariable(this->maxSpeedBack_, variableDirection::toclient);122 registerVariable(this->maxSpeedLeftRight_, variableDirection::toclient);123 registerVariable(this->maxSpeedUpDown_, variableDirection::toclient);124 125 registerVariable(this->accelerationFront_, variableDirection::toclient);126 registerVariable(this->accelerationBrake_, variableDirection::toclient);127 registerVariable(this->accelerationBack_, variableDirection::toclient);128 registerVariable(this->accelerationLeftRight_, variableDirection::toclient);129 registerVariable(this->accelerationUpDown_, variableDirection::toclient);115 registerVariable(this->shipID_, VariableDirection::ToClient, new NetworkCallback<Engine>(this, &Engine::networkcallback_shipID)); 116 117 registerVariable(this->speedFactor_, VariableDirection::ToClient); 118 registerVariable(this->boostFactor_, VariableDirection::ToClient); 119 120 registerVariable(this->maxSpeedFront_, VariableDirection::ToClient); 121 registerVariable(this->maxSpeedBack_, VariableDirection::ToClient); 122 registerVariable(this->maxSpeedLeftRight_, VariableDirection::ToClient); 123 registerVariable(this->maxSpeedUpDown_, VariableDirection::ToClient); 124 125 registerVariable(this->accelerationFront_, VariableDirection::ToClient); 126 registerVariable(this->accelerationBrake_, VariableDirection::ToClient); 127 registerVariable(this->accelerationBack_, VariableDirection::ToClient); 128 registerVariable(this->accelerationLeftRight_, VariableDirection::ToClient); 129 registerVariable(this->accelerationUpDown_, VariableDirection::ToClient); 130 130 } 131 131 -
code/trunk/src/orxonox/objects/items/MultiStateEngine.cc
r3196 r3280 82 82 void MultiStateEngine::registerVariables() 83 83 { 84 registerVariable(this->state_, variableDirection::toserver);84 registerVariable(this->state_, VariableDirection::ToServer); 85 85 } 86 86 … … 91 91 if (this->getShip()->hasLocalController()) 92 92 { 93 this->setObjectMode( objectDirection::bidirectional);93 this->setObjectMode(ObjectDirection::Bidirectional); 94 94 95 95 const Vector3& direction = this->getDirection(); -
code/trunk/src/orxonox/objects/pickup/ModifierPickup.cc
r3196 r3280 87 87 if (this->addTo(pawn)) 88 88 { 89 std::map<ModifierType:: Enum, float>::iterator it;89 std::map<ModifierType::Value, float>::iterator it; 90 90 91 91 for (it = this->additiveModifiers_.begin(); it != this->additiveModifiers_.end(); it++) … … 124 124 if (this->removeFrom(pawn)) 125 125 { 126 std::map<ModifierType:: Enum, float>::iterator it;126 std::map<ModifierType::Value, float>::iterator it; 127 127 128 128 for (it = this->additiveModifiers_.begin(); it != this->additiveModifiers_.end(); it++) … … 158 158 @return Returns the additive modifier for type (or 0 if not exists). 159 159 */ 160 float ModifierPickup::getAdditiveModifier(ModifierType:: Enumtype) const161 { 162 std::map<ModifierType:: Enum, float>::const_iterator it = this->additiveModifiers_.find(type);160 float ModifierPickup::getAdditiveModifier(ModifierType::Value type) const 161 { 162 std::map<ModifierType::Value, float>::const_iterator it = this->additiveModifiers_.find(type); 163 163 if (it != this->additiveModifiers_.end()) 164 164 return (*it).second; … … 171 171 @return Returns the multiplicative modifier for type (or 1 if not exists). 172 172 */ 173 float ModifierPickup::getMultiplicativeModifier(ModifierType:: Enumtype) const174 { 175 std::map<ModifierType:: Enum, float>::const_iterator it = this->multiplicativeModifiers_.find(type);173 float ModifierPickup::getMultiplicativeModifier(ModifierType::Value type) const 174 { 175 std::map<ModifierType::Value, float>::const_iterator it = this->multiplicativeModifiers_.find(type); 176 176 if (it != this->multiplicativeModifiers_.end()) 177 177 return (*it).second; … … 184 184 @param value The new additive modifier for type. 185 185 */ 186 void ModifierPickup::setAdditiveModifier(ModifierType:: Enumtype, float value)186 void ModifierPickup::setAdditiveModifier(ModifierType::Value type, float value) 187 187 { 188 188 if (this->additiveModifiers_.find(type) == this->additiveModifiers_.end()) 189 this->additiveModifiers_.insert( std::pair<ModifierType:: Enum, float>(type, value) );189 this->additiveModifiers_.insert( std::pair<ModifierType::Value, float>(type, value) ); 190 190 else 191 191 this->additiveModifiers_[type] = value; … … 196 196 @param value The new multiplicative modifier for type. 197 197 */ 198 void ModifierPickup::setMultiplicativeModifier(ModifierType:: Enumtype, float value)198 void ModifierPickup::setMultiplicativeModifier(ModifierType::Value type, float value) 199 199 { 200 200 if (this->multiplicativeModifiers_.find(type) == this->multiplicativeModifiers_.end()) 201 this->multiplicativeModifiers_.insert( std::pair<ModifierType:: Enum, float>(type, value) );201 this->multiplicativeModifiers_.insert( std::pair<ModifierType::Value, float>(type, value) ); 202 202 else 203 203 this->multiplicativeModifiers_[type] = value; -
code/trunk/src/orxonox/objects/pickup/ModifierPickup.h
r3196 r3280 130 130 void timerCallback(Pawn* pawn); //!< Method called when the timer runs out. 131 131 private: 132 float getAdditiveModifier(ModifierType:: Enumtype) const; //!< Get the additive modifier for a given ModifierType.133 float getMultiplicativeModifier(ModifierType:: Enumtype) const; //!< Get the multiplicative modifier for a given ModifierType.134 void setAdditiveModifier(ModifierType:: Enumtype, float value); //!< Set the additive modifier for a given ModifierType.135 void setMultiplicativeModifier(ModifierType:: Enumtype, float value); //!< Set the multiplicative modifier for a given ModifierType132 float getAdditiveModifier(ModifierType::Value type) const; //!< Get the additive modifier for a given ModifierType. 133 float getMultiplicativeModifier(ModifierType::Value type) const; //!< Get the multiplicative modifier for a given ModifierType. 134 void setAdditiveModifier(ModifierType::Value type, float value); //!< Set the additive modifier for a given ModifierType. 135 void setMultiplicativeModifier(ModifierType::Value type, float value); //!< Set the multiplicative modifier for a given ModifierType 136 136 137 std::map<ModifierType:: Enum, float> additiveModifiers_; //!< Map of additive modifiers, indexed by ModifierType.138 std::map<ModifierType:: Enum, float> multiplicativeModifiers_; //!< Map of multiplicative modifiers, indexed by ModifierType.137 std::map<ModifierType::Value, float> additiveModifiers_; //!< Map of additive modifiers, indexed by ModifierType. 138 std::map<ModifierType::Value, float> multiplicativeModifiers_; //!< Map of multiplicative modifiers, indexed by ModifierType. 139 139 140 140 float duration_; //!< Duration of this pickup's effect (0 for unlimited). -
code/trunk/src/orxonox/objects/pickup/ModifierType.h
r3196 r3280 44 44 @brief Gives the available types for modifiers. 45 45 */ 46 enum Enum46 enum Value 47 47 { 48 48 Unknown = 0, -
code/trunk/src/orxonox/objects/pickup/PickupCollection.cc
r3196 r3280 42 42 { 43 43 typedef std::pair<std::multimap<std::string, BaseItem*>::iterator, std::multimap<std::string, BaseItem*>::iterator> item_range; 44 typedef std::pair<std::multimap<ModifierType:: Enum, float>::iterator, std::multimap<ModifierType::Enum, float>::iterator> modifier_range;44 typedef std::pair<std::multimap<ModifierType::Value, float>::iterator, std::multimap<ModifierType::Value, float>::iterator> modifier_range; 45 45 46 46 //! Constructor … … 200 200 @param value Value for the modifier. 201 201 */ 202 void PickupCollection::addAdditiveModifier(ModifierType:: Enumtype, float value)203 { 204 this->additiveModifiers_.insert( std::pair<ModifierType:: Enum, float>(type, value) );202 void PickupCollection::addAdditiveModifier(ModifierType::Value type, float value) 203 { 204 this->additiveModifiers_.insert( std::pair<ModifierType::Value, float>(type, value) ); 205 205 } 206 206 /** … … 209 209 @return Returns the sum of the additive modifiers of the type. 210 210 */ 211 float PickupCollection::getAdditiveModifier(ModifierType:: Enumtype)211 float PickupCollection::getAdditiveModifier(ModifierType::Value type) 212 212 { 213 213 float v = 0.0f; … … 215 215 modifier_range range = this->additiveModifiers_.equal_range(type); 216 216 217 for (std::multimap<ModifierType:: Enum, float>::iterator it = range.first; it != range.second && it != this->additiveModifiers_.end(); it++)217 for (std::multimap<ModifierType::Value, float>::iterator it = range.first; it != range.second && it != this->additiveModifiers_.end(); it++) 218 218 { 219 219 v += (*it).second; … … 227 227 @param value Value which is to be removed. 228 228 */ 229 void PickupCollection::removeAdditiveModifier(ModifierType:: Enumtype, float value)229 void PickupCollection::removeAdditiveModifier(ModifierType::Value type, float value) 230 230 { 231 231 modifier_range range = this->additiveModifiers_.equal_range(type); 232 for (std::multimap<ModifierType:: Enum, float>::iterator it = range.first; it != range.second && it != this->additiveModifiers_.end(); it++)232 for (std::multimap<ModifierType::Value, float>::iterator it = range.first; it != range.second && it != this->additiveModifiers_.end(); it++) 233 233 { 234 234 if ((*it).second == value) … … 244 244 @param value Value for the modifier. 245 245 */ 246 void PickupCollection::addMultiplicativeModifier(ModifierType:: Enumtype, float value)247 { 248 this->multiplicativeModifiers_.insert( std::pair<ModifierType:: Enum, float>(type, value) );246 void PickupCollection::addMultiplicativeModifier(ModifierType::Value type, float value) 247 { 248 this->multiplicativeModifiers_.insert( std::pair<ModifierType::Value, float>(type, value) ); 249 249 } 250 250 /** … … 253 253 @return Returns the product of the multiplicative modifiers of the type. 254 254 */ 255 float PickupCollection::getMultiplicativeModifier(ModifierType:: Enumtype)255 float PickupCollection::getMultiplicativeModifier(ModifierType::Value type) 256 256 { 257 257 float v = 1.0f; 258 258 259 259 modifier_range range = this->multiplicativeModifiers_.equal_range(type); 260 for (std::multimap<ModifierType:: Enum, float>::iterator it = range.first; it != range.second && it != this->multiplicativeModifiers_.end(); it++)260 for (std::multimap<ModifierType::Value, float>::iterator it = range.first; it != range.second && it != this->multiplicativeModifiers_.end(); it++) 261 261 { 262 262 v *= (*it).second; … … 270 270 @param value Value which is to be removed. 271 271 */ 272 void PickupCollection::removeMultiplicativeModifier(ModifierType:: Enumtype, float value)272 void PickupCollection::removeMultiplicativeModifier(ModifierType::Value type, float value) 273 273 { 274 274 modifier_range range = this->multiplicativeModifiers_.equal_range(type); 275 for (std::multimap<ModifierType:: Enum, float>::iterator it = range.first; it != range.second && it != this->multiplicativeModifiers_.end(); it++)275 for (std::multimap<ModifierType::Value, float>::iterator it = range.first; it != range.second && it != this->multiplicativeModifiers_.end(); it++) 276 276 { 277 277 if ((*it).second == value) … … 289 289 @return Returns the value after being processed. 290 290 */ 291 float PickupCollection::processModifiers(ModifierType:: Enumtype, float inputValue, bool addBeforeMultiplication)291 float PickupCollection::processModifiers(ModifierType::Value type, float inputValue, bool addBeforeMultiplication) 292 292 { 293 293 float outputValue = inputValue; … … 310 310 @return Returns the value after being processed. 311 311 */ 312 Vector3 PickupCollection::processModifiers(ModifierType:: Enumtype, Vector3 inputValue, bool addBeforeMultiplication)312 Vector3 PickupCollection::processModifiers(ModifierType::Value type, Vector3 inputValue, bool addBeforeMultiplication) 313 313 { 314 314 Vector3 outputValue = inputValue; -
code/trunk/src/orxonox/objects/pickup/PickupCollection.h
r3196 r3280 67 67 void useItem(UsableItem* item); //!< Use a usable item. 68 68 69 void addAdditiveModifier(ModifierType:: Enumtype, float value); //!< Add an additive modifier.70 void addMultiplicativeModifier(ModifierType:: Enumtype, float value); //!< Add a multiplicative modifier.69 void addAdditiveModifier(ModifierType::Value type, float value); //!< Add an additive modifier. 70 void addMultiplicativeModifier(ModifierType::Value type, float value); //!< Add a multiplicative modifier. 71 71 72 float getAdditiveModifier(ModifierType:: Enumtype); //!< Get total additive modifier.73 float getMultiplicativeModifier(ModifierType:: Enumtype); //!< Get total multiplicative modifier.72 float getAdditiveModifier(ModifierType::Value type); //!< Get total additive modifier. 73 float getMultiplicativeModifier(ModifierType::Value type); //!< Get total multiplicative modifier. 74 74 75 void removeAdditiveModifier(ModifierType:: Enumtype, float value); //!< Remove an additive modifier.76 void removeMultiplicativeModifier(ModifierType:: Enumtype, float value); //!< Remove a multiplicative modifier.75 void removeAdditiveModifier(ModifierType::Value type, float value); //!< Remove an additive modifier. 76 void removeMultiplicativeModifier(ModifierType::Value type, float value); //!< Remove a multiplicative modifier. 77 77 78 float processModifiers(ModifierType:: Enumtype, float inputValue, bool addBeforeMultiplication = false); //!< Apply the modifiers to a float.79 Vector3 processModifiers(ModifierType:: Enumtype, Vector3 inputValue, bool addBeforeMultiplication = false); //!< Apply the modifiers to a Vector3.78 float processModifiers(ModifierType::Value type, float inputValue, bool addBeforeMultiplication = false); //!< Apply the modifiers to a float. 79 Vector3 processModifiers(ModifierType::Value type, Vector3 inputValue, bool addBeforeMultiplication = false); //!< Apply the modifiers to a Vector3. 80 80 81 81 /** … … 113 113 bool bBlockRemovals_; //!< Whether to block direct removals through remove(). 114 114 115 std::multimap<ModifierType:: Enum, float> additiveModifiers_; //!< Contains additive modifiers (indexed by ModifierType).116 std::multimap<ModifierType:: Enum, float> multiplicativeModifiers_; //!< Contains multiplicative modifiers (indexed by ModifierType).115 std::multimap<ModifierType::Value, float> additiveModifiers_; //!< Contains additive modifiers (indexed by ModifierType). 116 std::multimap<ModifierType::Value, float> multiplicativeModifiers_; //!< Contains multiplicative modifiers (indexed by ModifierType). 117 117 118 118 std::multimap<std::string, BaseItem*> items_; //!< Map of items in the collection (indexed by pickupIdentifier of the items). -
code/trunk/src/orxonox/objects/quest/GlobalQuest.cc
r3196 r3280 147 147 return false; 148 148 } 149 return (this->isInactive(player) && !(this->status_ == questStatus::completed || this->status_ == questStatus::failed));149 return (this->isInactive(player) && !(this->status_ == QuestStatus::Completed || this->status_ == QuestStatus::Failed)); 150 150 } 151 151 … … 189 189 Throws an Exception if player is NULL. 190 190 */ 191 questStatus::EnumGlobalQuest::getStatus(const PlayerInfo* player) const191 QuestStatus::Value GlobalQuest::getStatus(const PlayerInfo* player) const 192 192 { 193 193 if(player == NULL) //!< We don't want NULL-Pointers! … … 203 203 } 204 204 205 return questStatus::inactive;205 return QuestStatus::Inactive; 206 206 } 207 207 … … 217 217 Returns false if player is NULL. 218 218 */ 219 bool GlobalQuest::setStatus(PlayerInfo* player, const questStatus::Enum& status)219 bool GlobalQuest::setStatus(PlayerInfo* player, const QuestStatus::Value & status) 220 220 { 221 221 if(player == NULL) //!< We don't want NULL-Pointers! -
code/trunk/src/orxonox/objects/quest/GlobalQuest.h
r3196 r3280 97 97 virtual bool isCompletable(const PlayerInfo* player) const; //!< Checks whether the Quest can be completed. 98 98 99 virtual questStatus::EnumgetStatus(const PlayerInfo* player) const; //!< Returns the status of the Quest for a specific player.99 virtual QuestStatus::Value getStatus(const PlayerInfo* player) const; //!< Returns the status of the Quest for a specific player. 100 100 101 virtual bool setStatus(PlayerInfo* player, const questStatus::Enum& status); //!< Sets the status for a specific player.101 virtual bool setStatus(PlayerInfo* player, const QuestStatus::Value & status); //!< Sets the status for a specific player. 102 102 103 103 private: 104 104 std::set<PlayerInfo*> players_; //!< The set of players which possess this Quest. 105 questStatus::Enumstatus_; //!< The status of this Quest.105 QuestStatus::Value status_; //!< The status of this Quest. 106 106 std::list<QuestEffect*> rewards_; //!< Reward QuestEffects only invoked on the player completing the Quest. 107 107 -
code/trunk/src/orxonox/objects/quest/LocalQuest.cc
r3196 r3280 176 176 Throws an Exception if player is NULL. 177 177 */ 178 questStatus::EnumLocalQuest::getStatus(const PlayerInfo* player) const178 QuestStatus::Value LocalQuest::getStatus(const PlayerInfo* player) const 179 179 { 180 180 if(player == NULL) //!< No player has no defined status. … … 183 183 } 184 184 185 std::map<const PlayerInfo*, questStatus::Enum>::const_iterator it = this->playerStatus_.find(player);185 std::map<const PlayerInfo*, QuestStatus::Value>::const_iterator it = this->playerStatus_.find(player); 186 186 if (it != this->playerStatus_.end()) //!< If there is a player in the map. 187 187 { … … 189 189 } 190 190 191 return questStatus::inactive; //!< If the player is not yet in the map, that means the status of the quest form him is 'inactive'.191 return QuestStatus::Inactive; //!< If the player is not yet in the map, that means the status of the quest form him is 'inactive'. 192 192 } 193 193 … … 203 203 Returns false if player is NULL. 204 204 */ 205 bool LocalQuest::setStatus(PlayerInfo* player, const questStatus::Enum& status)205 bool LocalQuest::setStatus(PlayerInfo* player, const QuestStatus::Value & status) 206 206 { 207 207 if(player == NULL) //!< We can't set a status for no player. -
code/trunk/src/orxonox/objects/quest/LocalQuest.h
r3196 r3280 91 91 virtual bool isCompletable(const PlayerInfo* player) const; //!< Checks whether the Quest can be completed. 92 92 93 virtual questStatus::EnumgetStatus(const PlayerInfo* player) const; //!< Returns the status of the Quest for a specific player.94 virtual bool setStatus(PlayerInfo* player, const questStatus::Enum& status); //!< Sets the status for a specific player.93 virtual QuestStatus::Value getStatus(const PlayerInfo* player) const; //!< Returns the status of the Quest for a specific player. 94 virtual bool setStatus(PlayerInfo* player, const QuestStatus::Value & status); //!< Sets the status for a specific player. 95 95 96 96 private: 97 std::map<const PlayerInfo*, questStatus::Enum> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.97 std::map<const PlayerInfo*, QuestStatus::Value> playerStatus_; //!< List of the status for each player, with the Player-pointer as key. 98 98 99 99 }; -
code/trunk/src/orxonox/objects/quest/Quest.cc
r3196 r3280 302 302 bool Quest::isInactive(const PlayerInfo* player) const 303 303 { 304 return this->getStatus(player) == questStatus::inactive;304 return this->getStatus(player) == QuestStatus::Inactive; 305 305 } 306 306 … … 318 318 { 319 319 320 return this->getStatus(player) == questStatus::active;320 return this->getStatus(player) == QuestStatus::Active; 321 321 } 322 322 … … 333 333 bool Quest::isFailed(const PlayerInfo* player) const 334 334 { 335 return this->getStatus(player) == questStatus::failed;335 return this->getStatus(player) == QuestStatus::Failed; 336 336 } 337 337 … … 348 348 bool Quest::isCompleted(const PlayerInfo* player) const 349 349 { 350 return this->getStatus(player) == questStatus::completed;350 return this->getStatus(player) == QuestStatus::Completed; 351 351 } 352 352 … … 362 362 { 363 363 QuestListener::advertiseStatusChange(this->listeners_, "fail"); //!< Tells the QuestListeners, that the status has changed to failed. 364 this->setStatus(player, questStatus::failed);364 this->setStatus(player, QuestStatus::Failed); 365 365 366 366 COUT(4) << "Quest {" << this->getId() << "} is failed for player: " << player << " ." <<std::endl; … … 381 381 { 382 382 QuestListener::advertiseStatusChange(this->listeners_, "complete"); //!< Tells the QuestListeners, that the status has changed to completed. 383 this->setStatus(player, questStatus::completed);383 this->setStatus(player, QuestStatus::Completed); 384 384 385 385 COUT(4) << "Quest {" << this->getId() << "} is completed for player: " << player << " ." <<std::endl; … … 409 409 QuestListener::advertiseStatusChange(this->listeners_, "start"); //!< Tells the QuestListeners, that the status has changed to active. 410 410 411 this->setStatus(player, questStatus::active);411 this->setStatus(player, QuestStatus::Active); 412 412 413 413 this->getDescription()->sendAddQuestNotification(); -
code/trunk/src/orxonox/objects/quest/Quest.h
r3196 r3280 43 43 namespace orxonox 44 44 { 45 namespace questStatus45 namespace QuestStatus 46 46 { 47 48 47 //!Different states of a Quest. 49 enum Enum48 enum Value 50 49 { 51 inactive,52 active,53 failed,54 completed50 Inactive, 51 Active, 52 Failed, 53 Completed 55 54 }; 56 57 55 } 58 56 … … 133 131 { return this->completeEffects_; } 134 132 135 virtual questStatus::EnumgetStatus(const PlayerInfo* player) const = 0; //!< Returns the status of the Quest for a specific player.136 virtual bool setStatus(PlayerInfo* player, const questStatus::Enum& status) = 0; //!< Changes the status for a specific player.133 virtual QuestStatus::Value getStatus(const PlayerInfo* player) const = 0; //!< Returns the status of the Quest for a specific player. 134 virtual bool setStatus(PlayerInfo* player, const QuestStatus::Value & status) = 0; //!< Changes the status for a specific player. 137 135 138 136 private: -
code/trunk/src/orxonox/objects/quest/QuestEffectBeacon.cc
r3196 r3280 53 53 RegisterObject(QuestEffectBeacon); 54 54 55 this->status_ = QuestEffectBeaconStatus:: active;55 this->status_ = QuestEffectBeaconStatus::Active; 56 56 this->times_ = INFINITE_TIME; 57 57 } … … 162 162 if(activate) 163 163 { 164 this->status_ = QuestEffectBeaconStatus:: active;165 return true; 166 } 167 168 this->status_ = QuestEffectBeaconStatus:: inactive;164 this->status_ = QuestEffectBeaconStatus::Active; 165 return true; 166 } 167 168 this->status_ = QuestEffectBeaconStatus::Inactive; 169 169 return true; 170 170 } … … 190 190 if(this->getTimes() == 0) //!< Set the QuestEffectBeacon to inactive when the number of times it can be executed is reduced to 0. 191 191 { 192 this->status_ = QuestEffectBeaconStatus:: inactive;192 this->status_ = QuestEffectBeaconStatus::Inactive; 193 193 } 194 194 -
code/trunk/src/orxonox/objects/quest/QuestEffectBeacon.h
r3196 r3280 44 44 namespace QuestEffectBeaconStatus 45 45 { 46 47 46 //! The status of the beacon, can be either active or inactive. 48 enum Enum47 enum Value 49 48 { 50 inactive,51 active49 Inactive, 50 Active 52 51 }; 53 54 52 } 55 53 … … 98 96 */ 99 97 inline bool isActive(void) 100 { return this->status_ == QuestEffectBeaconStatus:: active; }98 { return this->status_ == QuestEffectBeaconStatus::Active; } 101 99 102 100 bool setActive(bool activate); //!< Set the status of the QuestEffectBeacon. … … 117 115 std::list<QuestEffect*> effects_; //!< The list of QuestEffects to be invoked on the executing player. 118 116 int times_; //!< Number of times the beacon can be exectued. 119 QuestEffectBeaconStatus:: Enumstatus_; //!< The status of the QUestEffectBeacon, Can be eighter active or inactive.117 QuestEffectBeaconStatus::Value status_; //!< The status of the QUestEffectBeacon, Can be eighter active or inactive. 120 118 121 119 bool setTimes(const int & n); //!< Set the number of times the QuestEffectBeacon can be executed. -
code/trunk/src/orxonox/objects/quest/QuestHint.cc
r3196 r3280 95 95 96 96 //! Find the player. 97 std::map<const PlayerInfo*, questHintStatus::Enum>::const_iterator it = this->playerStatus_.find(player);97 std::map<const PlayerInfo*, QuestHintStatus::Value>::const_iterator it = this->playerStatus_.find(player); 98 98 if (it != this->playerStatus_.end()) //!< If the player is in the map. 99 99 { … … 101 101 } 102 102 103 return questStatus::inactive;103 return QuestStatus::Inactive; 104 104 } 105 105 … … 118 118 if(!(this->isActive(player))) //!< If the hint is already active, activation is pointless. 119 119 { 120 this->playerStatus_[player] = questHintStatus::active;120 this->playerStatus_[player] = QuestHintStatus::Active; 121 121 122 122 this->getDescription()->sendAddHintNotification(); -
code/trunk/src/orxonox/objects/quest/QuestHint.h
r3196 r3280 42 42 namespace orxonox 43 43 { 44 namespace questHintStatus44 namespace QuestHintStatus 45 45 { 46 47 46 //! The state of the hint. 48 enum Enum47 enum Value 49 48 { 50 inactive,51 active49 Inactive, 50 Active 52 51 }; 53 54 52 } 55 53 … … 91 89 private: 92 90 Quest* quest_; //!< The Quest the QuestHint belongs to. 93 std::map<const PlayerInfo*, questHintStatus::Enum> playerStatus_; //!< List of the states for each player, with the Player-pointer as key.91 std::map<const PlayerInfo*, QuestHintStatus::Value> playerStatus_; //!< List of the states for each player, with the Player-pointer as key. 94 92 95 93 }; -
code/trunk/src/orxonox/objects/quest/QuestListener.cc
r3196 r3280 51 51 RegisterObject(QuestListener); 52 52 53 this->mode_ = questListenerMode::all;53 this->mode_ = QuestListenerMode::All; 54 54 this->quest_ = NULL; 55 55 } … … 132 132 if(mode == "all") 133 133 { 134 this->mode_ = questListenerMode::all;134 this->mode_ = QuestListenerMode::All; 135 135 } 136 136 else if(mode == "start") 137 137 { 138 this->mode_ = questListenerMode::start;138 this->mode_ = QuestListenerMode::Start; 139 139 } 140 140 else if(mode == "fail") 141 141 { 142 this->mode_ = questListenerMode::fail;142 this->mode_ = QuestListenerMode::Fail; 143 143 } 144 144 else if(mode == "complete") 145 145 { 146 this->mode_ = questListenerMode::complete;146 this->mode_ = QuestListenerMode::Complete; 147 147 } 148 148 else 149 149 { 150 150 COUT(2) << "QuestListener with invalid mode '" << mode << "' created. Mode set to 'all'." << std::endl; 151 this->mode_ = questListenerMode::all;151 this->mode_ = QuestListenerMode::All; 152 152 return false; 153 153 } … … 164 164 std::string QuestListener::getMode(void) 165 165 { 166 if(this->mode_ == questListenerMode::all)166 if(this->mode_ == QuestListenerMode::All) 167 167 { 168 168 return "all"; 169 169 } 170 else if(this->mode_ == questListenerMode::start)170 else if(this->mode_ == QuestListenerMode::Start) 171 171 { 172 172 return "start"; 173 173 } 174 else if(this->mode_ == questListenerMode::fail)174 else if(this->mode_ == QuestListenerMode::Fail) 175 175 { 176 176 return "fail"; 177 177 } 178 else if(this->mode_ == questListenerMode::complete)178 else if(this->mode_ == QuestListenerMode::Complete) 179 179 { 180 180 return "complete"; -
code/trunk/src/orxonox/objects/quest/QuestListener.h
r3196 r3280 43 43 namespace orxonox 44 44 { 45 namespace questListenerMode45 namespace QuestListenerMode 46 46 { 47 48 47 //! The mode of the QuestListener. 49 enum Enum48 enum Value 50 49 { 51 all,52 start,53 fail,54 complete50 All, 51 Start, 52 Fail, 53 Complete 55 54 }; 56 57 55 } 58 56 … … 93 91 94 92 private: 95 questListenerMode::Enummode_; //!< The mode of the QuestListener.93 QuestListenerMode::Value mode_; //!< The mode of the QuestListener. 96 94 Quest* quest_; //!< A pointer to the Quest the QuestListener is reacting to. 97 95 -
code/trunk/src/orxonox/objects/weaponsystem/projectiles/LightningGunProjectile.cc
r3196 r3280 56 56 this->materialBase_ = material; 57 57 58 BillboardProjectile::setMaterial(material + convertToString(this->textureIndex_));58 BillboardProjectile::setMaterial(material + multi_cast<std::string>(this->textureIndex_)); 59 59 } 60 60 -
code/trunk/src/orxonox/objects/weaponsystem/projectiles/ParticleProjectile.cc
r3196 r3280 44 44 if (GameMode::showsGraphics()) 45 45 { 46 this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot3_small", LODParticle:: normal);46 this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot3_small", LODParticle::Normal); 47 47 this->attachOgreObject(this->particles_->getParticleSystem()); 48 48 this->particles_->setKeepParticlesInLocalSpace(0); -
code/trunk/src/orxonox/objects/worldentities/Backlight.cc
r3196 r3280 29 29 #include "Backlight.h" 30 30 31 #include <algorithm> 31 32 #include <OgreRibbonTrail.h> 32 33 #include <OgreSceneManager.h> … … 108 109 void Backlight::registerVariables() 109 110 { 110 registerVariable(this->width_, variableDirection::toclient, new NetworkCallback<Backlight>(this, &Backlight::update_width));111 registerVariable(this->lifetime_, variableDirection::toclient, new NetworkCallback<Backlight>(this, &Backlight::update_lifetime));112 registerVariable(this->length_, variableDirection::toclient, new NetworkCallback<Backlight>(this, &Backlight::update_length));113 registerVariable(this->maxelements_, variableDirection::toclient, new NetworkCallback<Backlight>(this, &Backlight::update_maxelements));114 registerVariable(this->trailmaterial_, variableDirection::toclient, new NetworkCallback<Backlight>(this, &Backlight::update_trailmaterial));111 registerVariable(this->width_, VariableDirection::ToClient, new NetworkCallback<Backlight>(this, &Backlight::update_width)); 112 registerVariable(this->lifetime_, VariableDirection::ToClient, new NetworkCallback<Backlight>(this, &Backlight::update_lifetime)); 113 registerVariable(this->length_, VariableDirection::ToClient, new NetworkCallback<Backlight>(this, &Backlight::update_length)); 114 registerVariable(this->maxelements_, VariableDirection::ToClient, new NetworkCallback<Backlight>(this, &Backlight::update_maxelements)); 115 registerVariable(this->trailmaterial_, VariableDirection::ToClient, new NetworkCallback<Backlight>(this, &Backlight::update_trailmaterial)); 115 116 } 116 117 … … 175 176 void Backlight::stopturnonoff() 176 177 { 177 this->postprocessingtime_ = max(0.0f, this->lifetime_ - this->turnofftime_);178 this->postprocessingtime_ = std::max(0.0f, this->lifetime_ - this->turnofftime_); 178 179 179 180 FadingBillboard::stopturnonoff(); -
code/trunk/src/orxonox/objects/worldentities/BigExplosion.cc
r3196 r3280 56 56 */ 57 57 this->bStop_ = false; 58 this->LOD_ = LODParticle:: normal;58 this->LOD_ = LODParticle::Normal; 59 59 60 60 /* this->stf_ = "setTimeFactor "; … … 307 307 void BigExplosion::registerVariables() 308 308 { 309 registerVariable((int&)(this->LOD_), variableDirection::toclient, new NetworkCallback<BigExplosion>(this, &BigExplosion::LODchanged));310 registerVariable(this->bStop_, variableDirection::toclient, new NetworkCallback<BigExplosion>(this, &BigExplosion::checkStop));309 registerVariable((int&)(this->LOD_), VariableDirection::ToClient, new NetworkCallback<BigExplosion>(this, &BigExplosion::LODchanged)); 310 registerVariable(this->bStop_, VariableDirection::ToClient, new NetworkCallback<BigExplosion>(this, &BigExplosion::checkStop)); 311 311 } 312 312 -
code/trunk/src/orxonox/objects/worldentities/BigExplosion.h
r3196 r3280 47 47 void registerVariables(); 48 48 49 inline void setLOD(LODParticle:: LODlevel)49 inline void setLOD(LODParticle::Value level) 50 50 { this->LOD_ = level; this->LODchanged(); } 51 inline LODParticle:: LODgetLOD() const51 inline LODParticle::Value getLOD() const 52 52 { return this->LOD_; } 53 53 … … 98 98 ParticleInterface* explosionFire_; 99 99 100 LODParticle:: LODLOD_;100 LODParticle::Value LOD_; 101 101 Timer<BigExplosion> destroyTimer_; 102 102 }; -
code/trunk/src/orxonox/objects/worldentities/Billboard.cc
r3196 r3280 69 69 void Billboard::registerVariables() 70 70 { 71 registerVariable(this->material_, variableDirection::toclient, new NetworkCallback<Billboard>(this, &Billboard::changedMaterial));72 registerVariable(this->colour_, variableDirection::toclient, new NetworkCallback<Billboard>(this, &Billboard::changedColour));73 // registerVariable(this->rotation_, variableDirection::toclient, new NetworkCallback<Billboard>(this, &Billboard::changedRotation));71 registerVariable(this->material_, VariableDirection::ToClient, new NetworkCallback<Billboard>(this, &Billboard::changedMaterial)); 72 registerVariable(this->colour_, VariableDirection::ToClient, new NetworkCallback<Billboard>(this, &Billboard::changedColour)); 73 // registerVariable(this->rotation_, VariableDirection::ToClient, new NetworkCallback<Billboard>(this, &Billboard::changedRotation)); 74 74 } 75 75 -
code/trunk/src/orxonox/objects/worldentities/BlinkingBillboard.cc
r3196 r3280 66 66 void BlinkingBillboard::registerVariables() 67 67 { 68 // registerVariable(this->amplitude_, variableDirection::toclient);69 // registerVariable(this->frequency_, variableDirection::toclient);70 // registerVariable(this->phase_, variableDirection::toclient);68 // registerVariable(this->amplitude_, VariableDirection::ToClient); 69 // registerVariable(this->frequency_, VariableDirection::ToClient); 70 // registerVariable(this->phase_, VariableDirection::ToClient); 71 71 } 72 72 -
code/trunk/src/orxonox/objects/worldentities/Camera.cc
r3196 r3280 29 29 #include "Camera.h" 30 30 31 #include <algorithm> 31 32 #include <OgreCamera.h> 32 33 #include <OgreSceneManager.h> … … 34 35 35 36 #include "util/Exception.h" 36 #include "util/String .h"37 #include "util/StringUtils.h" 37 38 #include "core/CoreIncludes.h" 38 39 #include "core/ConfigValueIncludes.h" … … 104 105 { 105 106 // this stuff here may need some adjustments 106 float coeff = min(1.0f, 15.0f * dt);107 float coeff = std::min(1.0f, 15.0f * dt); 107 108 108 109 Vector3 offset = this->getWorldPosition() - this->cameraNode_->_getDerivedPosition(); -
code/trunk/src/orxonox/objects/worldentities/ControllableEntity.cc
r3196 r3280 79 79 80 80 this->setConfigValues(); 81 this->setPriority( priority::very_high );81 this->setPriority( Priority::VeryHigh ); 82 82 this->registerVariables(); 83 83 } … … 238 238 { 239 239 this->client_overwrite_ = this->server_overwrite_; 240 this->setObjectMode( objectDirection::bidirectional);240 this->setObjectMode(ObjectDirection::Bidirectional); 241 241 } 242 242 } … … 254 254 this->bHasLocalController_ = false; 255 255 this->bHasHumanController_ = false; 256 this->setObjectMode( objectDirection::toclient);256 this->setObjectMode(ObjectDirection::ToClient); 257 257 258 258 this->changedPlayer(); … … 368 368 void ControllableEntity::registerVariables() 369 369 { 370 registerVariable(this->cameraPositionTemplate_, variableDirection::toclient);371 registerVariable(this->hudtemplate_, variableDirection::toclient);372 373 registerVariable(this->server_position_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerPosition));374 registerVariable(this->server_linear_velocity_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerLinearVelocity));375 registerVariable(this->server_orientation_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerOrientation));376 registerVariable(this->server_angular_velocity_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerAngularVelocity));377 378 registerVariable(this->server_overwrite_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processOverwrite));379 registerVariable(this->client_overwrite_, variableDirection::toserver);380 381 registerVariable(this->client_position_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientPosition));382 registerVariable(this->client_linear_velocity_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientLinearVelocity));383 registerVariable(this->client_orientation_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientOrientation));384 registerVariable(this->client_angular_velocity_, variableDirection::toserver, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientAngularVelocity));370 registerVariable(this->cameraPositionTemplate_, VariableDirection::ToClient); 371 registerVariable(this->hudtemplate_, VariableDirection::ToClient); 372 373 registerVariable(this->server_position_, VariableDirection::ToClient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerPosition)); 374 registerVariable(this->server_linear_velocity_, VariableDirection::ToClient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerLinearVelocity)); 375 registerVariable(this->server_orientation_, VariableDirection::ToClient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerOrientation)); 376 registerVariable(this->server_angular_velocity_, VariableDirection::ToClient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processServerAngularVelocity)); 377 378 registerVariable(this->server_overwrite_, VariableDirection::ToClient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processOverwrite)); 379 registerVariable(this->client_overwrite_, VariableDirection::ToServer); 380 381 registerVariable(this->client_position_, VariableDirection::ToServer, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientPosition)); 382 registerVariable(this->client_linear_velocity_, VariableDirection::ToServer, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientLinearVelocity)); 383 registerVariable(this->client_orientation_, VariableDirection::ToServer, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientOrientation)); 384 registerVariable(this->client_angular_velocity_, VariableDirection::ToServer, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::processClientAngularVelocity)); 385 385 386 386 387 registerVariable(this->playerID_, variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::networkcallback_changedplayerID));387 registerVariable(this->playerID_, VariableDirection::ToClient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::networkcallback_changedplayerID)); 388 388 } 389 389 -
code/trunk/src/orxonox/objects/worldentities/ExplosionChunk.cc
r3196 r3280 48 48 49 49 this->bStop_ = false; 50 this->LOD_ = LODParticle:: normal;50 this->LOD_ = LODParticle::Normal; 51 51 52 52 if ( GameMode::showsGraphics() ) … … 104 104 void ExplosionChunk::registerVariables() 105 105 { 106 registerVariable((int&)(this->LOD_), variableDirection::toclient, new NetworkCallback<ExplosionChunk>(this, &ExplosionChunk::LODchanged));107 registerVariable(this->bStop_, variableDirection::toclient, new NetworkCallback<ExplosionChunk>(this, &ExplosionChunk::checkStop));106 registerVariable((int&)(this->LOD_), VariableDirection::ToClient, new NetworkCallback<ExplosionChunk>(this, &ExplosionChunk::LODchanged)); 107 registerVariable(this->bStop_, VariableDirection::ToClient, new NetworkCallback<ExplosionChunk>(this, &ExplosionChunk::checkStop)); 108 108 } 109 109 -
code/trunk/src/orxonox/objects/worldentities/ExplosionChunk.h
r3196 r3280 46 46 void registerVariables(); 47 47 48 inline void setLOD(LODParticle:: LODlevel)48 inline void setLOD(LODParticle::Value level) 49 49 { this->LOD_ = level; this->LODchanged(); } 50 inline LODParticle:: LODgetLOD() const50 inline LODParticle::Value getLOD() const 51 51 { return this->LOD_; } 52 52 … … 60 60 ParticleInterface* fire_; 61 61 ParticleInterface* smoke_; 62 LODParticle:: LODLOD_;62 LODParticle::Value LOD_; 63 63 Timer<ExplosionChunk> destroyTimer_; 64 64 }; -
code/trunk/src/orxonox/objects/worldentities/FadingBillboard.cc
r3196 r3280 64 64 void FadingBillboard::registerVariables() 65 65 { 66 registerVariable(this->turnontime_, variableDirection::toclient);67 registerVariable(this->turnofftime_, variableDirection::toclient);66 registerVariable(this->turnontime_, VariableDirection::ToClient); 67 registerVariable(this->turnofftime_, VariableDirection::ToClient); 68 68 } 69 69 -
code/trunk/src/orxonox/objects/worldentities/Light.cc
r3205 r3280 33 33 #include <boost/static_assert.hpp> 34 34 35 #include "util/String .h"35 #include "util/StringUtils.h" 36 36 #include "util/Exception.h" 37 37 #include "core/CoreIncludes.h" … … 45 45 46 46 // Be sure we don't do bad conversions 47 BOOST_STATIC_ASSERT((int)Ogre::Light::LT_POINT == (int)Light:: LT_POINT);48 BOOST_STATIC_ASSERT((int)Ogre::Light::LT_DIRECTIONAL == (int)Light:: LT_DIRECTIONAL);49 BOOST_STATIC_ASSERT((int)Ogre::Light::LT_SPOTLIGHT == (int)Light:: LT_SPOTLIGHT);47 BOOST_STATIC_ASSERT((int)Ogre::Light::LT_POINT == (int)Light::Point); 48 BOOST_STATIC_ASSERT((int)Ogre::Light::LT_DIRECTIONAL == (int)Light::Directional); 49 BOOST_STATIC_ASSERT((int)Ogre::Light::LT_SPOTLIGHT == (int)Light::Spotlight); 50 50 51 51 Light::Light(BaseObject* creator) : StaticEntity(creator) … … 56 56 this->diffuse_ = ColourValue::White; 57 57 this->specular_ = ColourValue::White; 58 this->type_ = Light:: LT_POINT;58 this->type_ = Light::Point; 59 59 this->attenuation_ = Vector4(100000, 1, 0, 0); 60 60 this->spotlightRange_ = Vector3(40.0f, 30.0f, 1.0f); … … 106 106 void Light::registerVariables() 107 107 { 108 registerVariable((int&)this->type_, variableDirection::toclient, new NetworkCallback<Light>(this, &Light::updateType));109 registerVariable(this->diffuse_, variableDirection::toclient, new NetworkCallback<Light>(this, &Light::updateDiffuseColour));110 registerVariable(this->specular_, variableDirection::toclient, new NetworkCallback<Light>(this, &Light::updateSpecularColour));111 registerVariable(this->attenuation_, variableDirection::toclient, new NetworkCallback<Light>(this, &Light::updateAttenuation));112 registerVariable(this->spotlightRange_, variableDirection::toclient, new NetworkCallback<Light>(this, &Light::updateSpotlightRange));108 registerVariable((int&)this->type_, VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateType)); 109 registerVariable(this->diffuse_, VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateDiffuseColour)); 110 registerVariable(this->specular_, VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateSpecularColour)); 111 registerVariable(this->attenuation_, VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateAttenuation)); 112 registerVariable(this->spotlightRange_, VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateSpotlightRange)); 113 113 } 114 114 … … 127 127 void Light::updateAttenuation() 128 128 { 129 if (this->light_ && this->type_ != Light:: LT_DIRECTIONAL)129 if (this->light_ && this->type_ != Light::Directional) 130 130 this->light_->setAttenuation(this->attenuation_.x, this->attenuation_.y, this->attenuation_.z, this->attenuation_.w); 131 131 } … … 133 133 void Light::updateSpotlightRange() 134 134 { 135 if (this->light_ && this->type_ == Light:: LT_SPOTLIGHT)135 if (this->light_ && this->type_ == Light::Spotlight) 136 136 this->light_->setSpotlightRange(Degree(this->spotlightRange_.x), Degree(this->spotlightRange_.y), this->spotlightRange_.z); 137 137 } … … 140 140 { 141 141 if (type == "point") 142 this->setType(Light:: LT_POINT);142 this->setType(Light::Point); 143 143 else if (type == "directional") 144 this->setType(Light:: LT_DIRECTIONAL);144 this->setType(Light::Directional); 145 145 else if (type == "spotlight") 146 this->setType(Light:: LT_SPOTLIGHT);146 this->setType(Light::Spotlight); 147 147 else 148 this->setType(Light:: LT_POINT);148 this->setType(Light::Point); 149 149 } 150 150 … … 153 153 switch (this->type_) 154 154 { 155 case Light:: LT_DIRECTIONAL:155 case Light::Directional: 156 156 return "directional"; 157 case Light:: LT_SPOTLIGHT:157 case Light::Spotlight: 158 158 return "spotlight"; 159 case Light:: LT_POINT:159 case Light::Point: 160 160 default: 161 161 return "point"; … … 169 169 this->light_->setType(static_cast<Ogre::Light::LightTypes>(this->type_)); 170 170 171 if (this->type_ != Light:: LT_DIRECTIONAL)171 if (this->type_ != Light::Directional) 172 172 this->updateAttenuation(); 173 if (this->type_ == Light:: LT_SPOTLIGHT)173 if (this->type_ == Light::Spotlight) 174 174 this->updateSpotlightRange(); 175 175 } -
code/trunk/src/orxonox/objects/worldentities/Light.h
r3196 r3280 45 45 { 46 46 /// Point light sources give off light equally in all directions, so require only position not direction 47 LT_POINT,47 Point, 48 48 /// Directional lights simulate parallel light beams from a distant source, hence have direction but no position 49 LT_DIRECTIONAL,49 Directional, 50 50 /// Spotlights simulate a cone of light from a source so require position and direction, plus extra values for falloff 51 LT_SPOTLIGHT51 Spotlight 52 52 }; 53 53 -
code/trunk/src/orxonox/objects/worldentities/Model.cc
r3196 r3280 65 65 void Model::registerVariables() 66 66 { 67 registerVariable(this->meshSrc_, variableDirection::toclient, new NetworkCallback<Model>(this, &Model::changedMesh));68 registerVariable(this->bCastShadows_, variableDirection::toclient, new NetworkCallback<Model>(this, &Model::changedShadows));67 registerVariable(this->meshSrc_, VariableDirection::ToClient, new NetworkCallback<Model>(this, &Model::changedMesh)); 68 registerVariable(this->bCastShadows_, VariableDirection::ToClient, new NetworkCallback<Model>(this, &Model::changedShadows)); 69 69 } 70 70 -
code/trunk/src/orxonox/objects/worldentities/MovableEntity.cc
r3196 r3280 52 52 this->continuousResynchroTimer_ = 0; 53 53 54 this->setPriority( priority::low);54 this->setPriority(Priority::Low); 55 55 56 56 this->registerVariables(); … … 89 89 void MovableEntity::registerVariables() 90 90 { 91 registerVariable(this->linearVelocity_, variableDirection::toclient, new NetworkCallback<MovableEntity>(this, &MovableEntity::processLinearVelocity));92 registerVariable(this->angularVelocity_, variableDirection::toclient, new NetworkCallback<MovableEntity>(this, &MovableEntity::processAngularVelocity));91 registerVariable(this->linearVelocity_, VariableDirection::ToClient, new NetworkCallback<MovableEntity>(this, &MovableEntity::processLinearVelocity)); 92 registerVariable(this->angularVelocity_, VariableDirection::ToClient, new NetworkCallback<MovableEntity>(this, &MovableEntity::processAngularVelocity)); 93 93 94 registerVariable(this->overwrite_position_, variableDirection::toclient, new NetworkCallback<MovableEntity>(this, &MovableEntity::overwritePosition));95 registerVariable(this->overwrite_orientation_, variableDirection::toclient, new NetworkCallback<MovableEntity>(this, &MovableEntity::overwriteOrientation));94 registerVariable(this->overwrite_position_, VariableDirection::ToClient, new NetworkCallback<MovableEntity>(this, &MovableEntity::overwritePosition)); 95 registerVariable(this->overwrite_orientation_, VariableDirection::ToClient, new NetworkCallback<MovableEntity>(this, &MovableEntity::overwriteOrientation)); 96 96 } 97 97 -
code/trunk/src/orxonox/objects/worldentities/ParticleEmitter.cc
r3196 r3280 53 53 54 54 this->particles_ = 0; 55 this->LOD_ = LODParticle:: normal;55 this->LOD_ = LODParticle::Normal; 56 56 57 57 this->registerVariables(); … … 71 71 SUPER(ParticleEmitter, XMLPort, xmlelement, mode); 72 72 73 XMLPortParam(ParticleEmitter, "lod", setLODxml, getLODxml, xmlelement, mode).defaultValues(LODParticle:: normal);73 XMLPortParam(ParticleEmitter, "lod", setLODxml, getLODxml, xmlelement, mode).defaultValues(LODParticle::Normal); 74 74 XMLPortParam(ParticleEmitter, "source", setSource, getSource, xmlelement, mode); 75 75 } … … 77 77 void ParticleEmitter::registerVariables() 78 78 { 79 registerVariable(this->source_, variableDirection::toclient, new NetworkCallback<ParticleEmitter>(this, &ParticleEmitter::sourceChanged));80 registerVariable((int&)(this->LOD_), variableDirection::toclient, new NetworkCallback<ParticleEmitter>(this, &ParticleEmitter::LODchanged));79 registerVariable(this->source_, VariableDirection::ToClient, new NetworkCallback<ParticleEmitter>(this, &ParticleEmitter::sourceChanged)); 80 registerVariable((int&)(this->LOD_), VariableDirection::ToClient, new NetworkCallback<ParticleEmitter>(this, &ParticleEmitter::LODchanged)); 81 81 } 82 82 -
code/trunk/src/orxonox/objects/worldentities/ParticleEmitter.h
r3196 r3280 57 57 { return this->source_; } 58 58 59 inline void setLOD(LODParticle:: LODlevel)59 inline void setLOD(LODParticle::Value level) 60 60 { this->LOD_ = level; this->LODchanged(); } 61 inline LODParticle:: LODgetLOD() const61 inline LODParticle::Value getLOD() const 62 62 { return this->LOD_; } 63 63 64 64 protected: 65 65 inline void setLODxml(unsigned int level) 66 { this->LOD_ = (LODParticle:: LOD)level; this->LODchanged(); }66 { this->LOD_ = (LODParticle::Value)level; this->LODchanged(); } 67 67 inline unsigned int getLODxml() const 68 68 { return (unsigned int)this->LOD_; } … … 73 73 ParticleInterface* particles_; 74 74 std::string source_; 75 LODParticle:: LODLOD_;75 LODParticle::Value LOD_; 76 76 }; 77 77 } -
code/trunk/src/orxonox/objects/worldentities/Planet.cc
r3196 r3280 157 157 void Planet::registerVariables() 158 158 { 159 registerVariable(this->atmosphere_, variableDirection::toclient);160 registerVariable(this->meshSrc_, variableDirection::toclient, new NetworkCallback<Planet>(this, &Planet::changedMesh));161 registerVariable(this->bCastShadows_, variableDirection::toclient, new NetworkCallback<Planet>(this, &Planet::changedShadows));162 registerVariable(this->atmosphereSize, variableDirection::toclient);163 registerVariable(this->imageSize, variableDirection::toclient);159 registerVariable(this->atmosphere_, VariableDirection::ToClient); 160 registerVariable(this->meshSrc_, VariableDirection::ToClient, new NetworkCallback<Planet>(this, &Planet::changedMesh)); 161 registerVariable(this->bCastShadows_, VariableDirection::ToClient, new NetworkCallback<Planet>(this, &Planet::changedShadows)); 162 registerVariable(this->atmosphereSize, VariableDirection::ToClient); 163 registerVariable(this->imageSize, VariableDirection::ToClient); 164 164 } 165 165 -
code/trunk/src/orxonox/objects/worldentities/PongBall.cc
r3196 r3280 72 72 registerVariable( this->relMercyOffset_ ); 73 73 registerVariable( this->batID_[0] ); 74 registerVariable( this->batID_[1], variableDirection::toclient, new NetworkCallback<PongBall>( this, &PongBall::applyBats) );74 registerVariable( this->batID_[1], VariableDirection::ToClient, new NetworkCallback<PongBall>( this, &PongBall::applyBats) ); 75 75 } 76 76 -
code/trunk/src/orxonox/objects/worldentities/StaticEntity.cc
r3196 r3280 43 43 RegisterObject(StaticEntity); 44 44 45 this->setPriority( priority::very_low);45 this->setPriority(Priority::VeryLow); 46 46 47 47 this->registerVariables(); … … 54 54 void StaticEntity::registerVariables() 55 55 { 56 registerVariable(this->getPosition(), variableDirection::toclient, new NetworkCallback<StaticEntity>(this, &StaticEntity::positionChanged));57 registerVariable(this->getOrientation(), variableDirection::toclient, new NetworkCallback<StaticEntity>(this, &StaticEntity::orientationChanged));56 registerVariable(this->getPosition(), VariableDirection::ToClient, new NetworkCallback<StaticEntity>(this, &StaticEntity::positionChanged)); 57 registerVariable(this->getOrientation(), VariableDirection::ToClient, new NetworkCallback<StaticEntity>(this, &StaticEntity::orientationChanged)); 58 58 } 59 59 -
code/trunk/src/orxonox/objects/worldentities/WorldEntity.cc
r3196 r3280 175 175 void WorldEntity::registerVariables() 176 176 { 177 registerVariable(this->mainStateName_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::changedMainState));178 179 registerVariable(this->bActive_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::changedActivity));180 registerVariable(this->bVisible_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::changedVisibility));181 182 registerVariable(this->getScale3D(), variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::scaleChanged));177 registerVariable(this->mainStateName_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::changedMainState)); 178 179 registerVariable(this->bActive_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::changedActivity)); 180 registerVariable(this->bVisible_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::changedVisibility)); 181 182 registerVariable(this->getScale3D(), VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::scaleChanged)); 183 183 184 184 // Physics stuff 185 registerVariable(this->mass_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::massChanged));186 registerVariable(this->restitution_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::restitutionChanged));187 registerVariable(this->angularFactor_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::angularFactorChanged));188 registerVariable(this->linearDamping_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::linearDampingChanged));189 registerVariable(this->angularDamping_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::angularDampingChanged));190 registerVariable(this->friction_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::frictionChanged));185 registerVariable(this->mass_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::massChanged)); 186 registerVariable(this->restitution_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::restitutionChanged)); 187 registerVariable(this->angularFactor_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::angularFactorChanged)); 188 registerVariable(this->linearDamping_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::linearDampingChanged)); 189 registerVariable(this->angularDamping_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::angularDampingChanged)); 190 registerVariable(this->friction_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::frictionChanged)); 191 191 registerVariable(this->bCollisionCallbackActive_, 192 variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionCallbackActivityChanged));192 VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionCallbackActivityChanged)); 193 193 registerVariable(this->bCollisionResponseActive_, 194 variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionResponseActivityChanged));194 VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionResponseActivityChanged)); 195 195 registerVariable((int&)this->collisionTypeSynchronised_, 196 variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionTypeChanged));196 VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionTypeChanged)); 197 197 registerVariable(this->bPhysicsActiveSynchronised_, 198 variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::physicsActivityChanged));198 VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::physicsActivityChanged)); 199 199 200 200 // Attach to parent if necessary 201 registerVariable(this->parentID_, variableDirection::toclient, new NetworkCallback<WorldEntity>(this, &WorldEntity::networkcallback_parentChanged));201 registerVariable(this->parentID_, VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::networkcallback_parentChanged)); 202 202 } 203 203 -
code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.cc
r3214 r3280 28 28 29 29 #include "Pawn.h" 30 31 #include <algorithm> 30 32 31 33 #include "core/CoreIncludes.h" … … 117 119 void Pawn::registerVariables() 118 120 { 119 registerVariable(this->bAlive_, variableDirection::toclient);120 registerVariable(this->health_, variableDirection::toclient);121 registerVariable(this->initialHealth_, variableDirection::toclient);122 registerVariable(this->bReload_, variableDirection::toserver);121 registerVariable(this->bAlive_, VariableDirection::ToClient); 122 registerVariable(this->health_, VariableDirection::ToClient); 123 registerVariable(this->initialHealth_, VariableDirection::ToClient); 124 registerVariable(this->bReload_, VariableDirection::ToServer); 123 125 } 124 126 … … 152 154 void Pawn::setHealth(float health) 153 155 { 154 this->health_ = min(health, this->maxHealth_);156 this->health_ = std::min(health, this->maxHealth_); 155 157 } 156 158 -
code/trunk/src/orxonox/objects/worldentities/pawns/SpaceShip.cc
r3196 r3280 90 90 void SpaceShip::registerVariables() 91 91 { 92 registerVariable(this->primaryThrust_, variableDirection::toclient);93 registerVariable(this->auxilaryThrust_, variableDirection::toclient);94 registerVariable(this->rotationThrust_, variableDirection::toclient);92 registerVariable(this->primaryThrust_, VariableDirection::ToClient); 93 registerVariable(this->auxilaryThrust_, VariableDirection::ToClient); 94 registerVariable(this->rotationThrust_, VariableDirection::ToClient); 95 95 } 96 96 -
code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.cc
r3196 r3280 93 93 void Spectator::registerVariables() 94 94 { 95 registerVariable(this->bGreetingFlareVisible_, variableDirection::toclient, new NetworkCallback<Spectator>(this, &Spectator::changedFlareVisibility));96 registerVariable(this->bGreeting_, variableDirection::toserver, new NetworkCallback<Spectator>(this, &Spectator::changedGreeting));95 registerVariable(this->bGreetingFlareVisible_, VariableDirection::ToClient, new NetworkCallback<Spectator>(this, &Spectator::changedFlareVisibility)); 96 registerVariable(this->bGreeting_, VariableDirection::ToServer, new NetworkCallback<Spectator>(this, &Spectator::changedGreeting)); 97 97 } 98 98 … … 145 145 ControllableEntity::setPlayer(player); 146 146 147 // this->setObjectMode( objectDirection::toclient);147 // this->setObjectMode(ObjectDirection::ToClient); 148 148 } 149 149 -
code/trunk/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc
r3196 r3280 43 43 RegisterObject(TeamBaseMatchBase); 44 44 45 this->state_ = BaseState:: uncontrolled;45 this->state_ = BaseState::Uncontrolled; 46 46 47 47 TeamBaseMatch* gametype = dynamic_cast<TeamBaseMatch*>(this->getGametype()); … … 66 66 switch (this->state_) 67 67 { 68 case BaseState:: controlTeam1:68 case BaseState::ControlTeam1: 69 69 colour = gametype->getTeamColour(0); 70 70 break; 71 case BaseState:: controlTeam2:71 case BaseState::ControlTeam2: 72 72 colour = gametype->getTeamColour(1); 73 73 break; 74 case BaseState:: uncontrolled:74 case BaseState::Uncontrolled: 75 75 default: 76 76 colour = ColourValue(0.5, 0.5, 0.5, 1.0); -
code/trunk/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.h
r3196 r3280 38 38 namespace BaseState 39 39 { 40 enum Enum40 enum Value 41 41 { 42 uncontrolled,43 controlTeam1,44 controlTeam2,42 Uncontrolled, 43 ControlTeam1, 44 ControlTeam2, 45 45 }; 46 46 } … … 58 58 59 59 // Set the state of a base to whatever the argument of the function is 60 void setState(BaseState:: Enumstate)60 void setState(BaseState::Value state) 61 61 { 62 62 this->state_ = state; … … 66 66 67 67 // Get the state of a base as a return value 68 BaseState:: EnumgetState() const68 BaseState::Value getState() const 69 69 { 70 70 return this->state_; … … 75 75 void changeTeamColour(); 76 76 77 BaseState:: Enumstate_;77 BaseState::Value state_; 78 78 }; 79 79 } -
code/trunk/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc
r3196 r3280 141 141 } 142 142 143 bool DistanceTrigger::isTriggered(TriggerMode mode)143 bool DistanceTrigger::isTriggered(TriggerMode::Value mode) 144 144 { 145 145 if (Trigger::isTriggered(mode)) -
code/trunk/src/orxonox/objects/worldentities/triggers/DistanceTrigger.h
r3196 r3280 59 59 60 60 protected: 61 virtual bool isTriggered(TriggerMode mode);61 virtual bool isTriggered(TriggerMode::Value mode); 62 62 virtual void notifyMaskUpdate() {} 63 63 -
code/trunk/src/orxonox/objects/worldentities/triggers/EventTrigger.cc
r3196 r3280 54 54 } 55 55 56 bool EventTrigger::isTriggered(TriggerMode mode)56 bool EventTrigger::isTriggered(TriggerMode::Value mode) 57 57 { 58 58 if (Trigger::isTriggered(mode)) -
code/trunk/src/orxonox/objects/worldentities/triggers/EventTrigger.h
r3196 r3280 47 47 48 48 protected: 49 virtual bool isTriggered(TriggerMode mode);49 virtual bool isTriggered(TriggerMode::Value mode); 50 50 51 51 private: -
code/trunk/src/orxonox/objects/worldentities/triggers/PlayerTrigger.h
r3196 r3280 70 70 71 71 protected: 72 virtual bool isTriggered(TriggerMode mode) = 0;72 virtual bool isTriggered(TriggerMode::Value mode) = 0; 73 73 74 74 /** -
code/trunk/src/orxonox/objects/worldentities/triggers/Trigger.cc
r3196 r3280 46 46 RegisterObject(Trigger); 47 47 48 this->mode_ = T M_EventTriggerAND;48 this->mode_ = TriggerMode::EventTriggerAND; 49 49 50 50 this->bFirstTick_ = true; … … 163 163 } 164 164 165 bool Trigger::isTriggered(TriggerMode mode)165 bool Trigger::isTriggered(TriggerMode::Value mode) 166 166 { 167 167 // if (this->bUpdating_) … … 175 175 switch (mode) 176 176 { 177 case T M_EventTriggerAND:177 case TriggerMode::EventTriggerAND: 178 178 returnval = checkAnd(); 179 179 break; 180 case T M_EventTriggerOR:180 case TriggerMode::EventTriggerOR: 181 181 returnval = checkOr(); 182 182 break; 183 case T M_EventTriggerXOR:183 case TriggerMode::EventTriggerXOR: 184 184 returnval = checkXor(); 185 185 break; … … 270 270 { 271 271 if (modeName == "and") 272 this->setMode(T M_EventTriggerAND);272 this->setMode(TriggerMode::EventTriggerAND); 273 273 else if (modeName == "or") 274 this->setMode(T M_EventTriggerOR);274 this->setMode(TriggerMode::EventTriggerOR); 275 275 else if (modeName == "xor") 276 this->setMode(T M_EventTriggerXOR);276 this->setMode(TriggerMode::EventTriggerXOR); 277 277 } 278 278 279 279 std::string Trigger::getModeString() const 280 280 { 281 if (this->mode_ == T M_EventTriggerAND)281 if (this->mode_ == TriggerMode::EventTriggerAND) 282 282 return std::string("and"); 283 else if (this->mode_ == T M_EventTriggerOR)283 else if (this->mode_ == TriggerMode::EventTriggerOR) 284 284 return std::string("or"); 285 else if (this->mode_ == T M_EventTriggerXOR)285 else if (this->mode_ == TriggerMode::EventTriggerXOR) 286 286 return std::string("xor"); 287 287 else -
code/trunk/src/orxonox/objects/worldentities/triggers/Trigger.h
r3196 r3280 41 41 namespace orxonox 42 42 { 43 enumTriggerMode43 namespace TriggerMode 44 44 { 45 TM_EventTriggerAND, 46 TM_EventTriggerOR, 47 TM_EventTriggerXOR, 48 }; 45 enum Value 46 { 47 EventTriggerAND, 48 EventTriggerOR, 49 EventTriggerXOR, 50 }; 51 } 49 52 50 53 class _OrxonoxExport Trigger : public StaticEntity, public Tickable … … 64 67 65 68 void setMode(const std::string& modeName); 66 inline void setMode(TriggerMode mode)69 inline void setMode(TriggerMode::Value mode) 67 70 { this->mode_ = mode; } 68 inline TriggerMode getMode() const71 inline TriggerMode::Value getMode() const 69 72 { return mode_; } 70 73 … … 103 106 protected: 104 107 inline bool isTriggered() { return this->isTriggered(this->mode_); } 105 virtual bool isTriggered(TriggerMode mode);108 virtual bool isTriggered(TriggerMode::Value mode); 106 109 virtual void triggered(bool bIsTriggered); 107 110 … … 118 121 bool bFirstTick_; 119 122 120 TriggerMode mode_;123 TriggerMode::Value mode_; 121 124 bool bInvertMode_; 122 125 bool bSwitch_; -
code/trunk/src/orxonox/overlays/OrxonoxOverlay.cc
r3196 r3280 42 42 #include "util/Convert.h" 43 43 #include "util/Exception.h" 44 #include "util/String .h"44 #include "util/StringUtils.h" 45 45 #include "core/GameMode.h" 46 46 #include "core/CoreIncludes.h" … … 72 72 // create the Ogre::Overlay 73 73 overlay_ = Ogre::OverlayManager::getSingleton().create("OrxonoxOverlay_overlay_" 74 + convertToString(hudOverlayCounter_s++));74 + multi_cast<std::string>(hudOverlayCounter_s++)); 75 75 76 76 // create background panel (can be used to show any picture) 77 77 this->background_ = static_cast<Ogre::PanelOverlayElement*>( 78 78 Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", 79 "OrxonoxOverlay_background_" + convertToString(hudOverlayCounter_s++)));79 "OrxonoxOverlay_background_" + multi_cast<std::string>(hudOverlayCounter_s++))); 80 80 this->overlay_->add2D(this->background_); 81 81 -
code/trunk/src/orxonox/overlays/OverlayText.cc
r3196 r3280 34 34 #include <boost/static_assert.hpp> 35 35 36 #include "util/String .h"36 #include "util/StringUtils.h" 37 37 #include "core/CoreIncludes.h" 38 38 #include "core/XMLPort.h" -
code/trunk/src/orxonox/overlays/console/InGameConsole.cc
r3196 r3280 30 30 #include "InGameConsole.h" 31 31 32 #include <algorithm> 32 33 #include <string> 33 34 #include <OgreOverlay.h> … … 219 220 for (int i = 0; i < LINES; i++) 220 221 { 221 this->consoleOverlayTextAreas_[i] = static_cast<Ogre::TextAreaOverlayElement*>(ovMan->createOverlayElement("TextArea", "InGameConsoleTextArea" + convertToString(i)));222 this->consoleOverlayTextAreas_[i] = static_cast<Ogre::TextAreaOverlayElement*>(ovMan->createOverlayElement("TextArea", "InGameConsoleTextArea" + multi_cast<std::string>(i))); 222 223 this->consoleOverlayTextAreas_[i]->setMetricsMode(Ogre::GMM_PIXELS); 223 224 this->consoleOverlayTextAreas_[i]->setFontName("MonofurConsole"); … … 425 426 426 427 if (LINES > 0) 427 this->maxCharsPerLine_ = max((unsigned int)10, (unsigned int) ((float)this->desiredTextWidth_ / CHAR_WIDTH));428 this->maxCharsPerLine_ = std::max((unsigned int)10, (unsigned int) ((float)this->desiredTextWidth_ / CHAR_WIDTH)); 428 429 else 429 430 this->maxCharsPerLine_ = 10; -
code/trunk/src/orxonox/overlays/hud/GametypeStatus.cc
r3196 r3280 70 70 { 71 71 if (gtinfo->isStartCountdownRunning()) 72 this->setCaption( convertToString((int)ceil(gtinfo->getStartCountdown())));72 this->setCaption(multi_cast<std::string>((int)ceil(gtinfo->getStartCountdown()))); 73 73 else if (ce->isA(Class(Spectator))) 74 74 this->setCaption("Press [Fire] to respawn"); -
code/trunk/src/orxonox/overlays/hud/HUDBar.cc
r3196 r3280 38 38 39 39 #include "util/Convert.h" 40 #include "util/String .h"40 #include "util/StringUtils.h" 41 41 #include "core/CoreIncludes.h" 42 42 #include "core/XMLPort.h" … … 72 72 73 73 // create new material 74 std::string materialname = "barmaterial" + getConvertedValue<unsigned int,std::string>(materialcount_s++);74 std::string materialname = "barmaterial" + multi_cast<std::string>(materialcount_s++); 75 75 Ogre::MaterialPtr material = (Ogre::MaterialPtr)Ogre::MaterialManager::getSingleton().create(materialname, "General"); 76 76 material->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); -
code/trunk/src/orxonox/overlays/hud/HUDHealthBar.cc
r3196 r3280 83 83 { 84 84 this->setValue(this->owner_->getHealth() / this->owner_->getInitialHealth()); 85 this->textoverlay_->setCaption( convertToString((int)this->owner_->getHealth()));85 this->textoverlay_->setCaption(multi_cast<std::string>((int)this->owner_->getHealth())); 86 86 } 87 87 -
code/trunk/src/orxonox/overlays/hud/HUDNavigation.cc
r3196 r3280 35 35 36 36 #include "util/Math.h" 37 #include "util/String .h"37 #include "util/StringUtils.h" 38 38 #include "util/Convert.h" 39 39 #include "core/CoreIncludes.h" … … 142 142 // set text 143 143 int dist = (int) getDist2Focus(); 144 navText_->setCaption( convertToString(dist));145 float textLength = convertToString(dist).size() * navText_->getCharHeight() * 0.3;144 navText_->setCaption(multi_cast<std::string>(dist)); 145 float textLength = multi_cast<std::string>(dist).size() * navText_->getCharHeight() * 0.3; 146 146 147 147 /* -
code/trunk/src/orxonox/overlays/hud/HUDRadar.cc
r3196 r3280 34 34 35 35 #include "util/Math.h" 36 #include "util/String .h"36 #include "util/StringUtils.h" 37 37 #include "core/CoreIncludes.h" 38 38 #include "core/XMLPort.h" -
code/trunk/src/orxonox/overlays/hud/HUDTimer.cc
r3196 r3280 59 59 if (gametype->getTimerIsActive()) 60 60 { 61 this->setCaption( convertToString((int)gametype->getTime() + 1));61 this->setCaption(multi_cast<std::string>((int)gametype->getTime() + 1)); 62 62 } 63 63 } -
code/trunk/src/orxonox/overlays/hud/PongScore.cc
r3196 r3280 83 83 { 84 84 name1 = player1->getName(); 85 score1 = convertToString(this->owner_->getScore(player1));85 score1 = multi_cast<std::string>(this->owner_->getScore(player1)); 86 86 } 87 87 … … 89 89 { 90 90 name2 = player2->getName(); 91 score2 = convertToString(this->owner_->getScore(player2));91 score2 = multi_cast<std::string>(this->owner_->getScore(player2)); 92 92 } 93 93 -
code/trunk/src/orxonox/overlays/hud/TeamBaseMatchScore.cc
r3196 r3280 71 71 if (this->owner_) 72 72 { 73 std::string bases1 = "(" + convertToString(this->owner_->getTeamBases(0)) + ")";74 std::string bases2 = "(" + convertToString(this->owner_->getTeamBases(1)) + ")";73 std::string bases1 = "(" + multi_cast<std::string>(this->owner_->getTeamBases(0)) + ")"; 74 std::string bases2 = "(" + multi_cast<std::string>(this->owner_->getTeamBases(1)) + ")"; 75 75 76 std::string score1 = convertToString(this->owner_->getTeamPoints(0));77 std::string score2 = convertToString(this->owner_->getTeamPoints(1));76 std::string score1 = multi_cast<std::string>(this->owner_->getTeamPoints(0)); 77 std::string score2 = multi_cast<std::string>(this->owner_->getTeamPoints(1)); 78 78 79 79 std::string output1; -
code/trunk/src/orxonox/overlays/stats/CreateLines.cc
r3196 r3280 99 99 // while (textColumns_.size() < numberOfColumns) 100 100 // { 101 // Ogre::TextAreaOverlayElement* tempTextArea = static_cast<Ogre::TextAreaOverlayElement*>(ovMan->createOverlayElement("TextArea", "StatsLineTextArea" + getName() + convertToString(lineIndex) + convertToString(colIndex)));101 // Ogre::TextAreaOverlayElement* tempTextArea = static_cast<Ogre::TextAreaOverlayElement*>(ovMan->createOverlayElement("TextArea", "StatsLineTextArea" + getName() + multi_cast<std::string>(lineIndex) + multi_cast<std::string>(colIndex))); 102 102 // textColumns_.push_back(tempTextArea); 103 103 // this->background_->addChild(tempTextArea); -
code/trunk/src/orxonox/overlays/stats/Stats.cc
r3196 r3280 33 33 #include <OgreBorderPanelOverlayElement.h> 34 34 35 #include "util/String .h"35 #include "util/StringUtils.h" 36 36 #include "core/CoreIncludes.h" 37 37 #include "core/ConfigValueIncludes.h" -
code/trunk/src/orxonox/sound/SoundManager.cc
r3196 r3280 39 39 { 40 40 SoundManager* SoundManager::singletonRef_s = NULL; 41 ALCdevice* SoundManager::device_s = NULL;42 41 43 42 /** … … 49 48 singletonRef_s = this; 50 49 50 this->device_ = NULL; 51 51 this->soundavailable_ = true; 52 52 if(!alutInitWithoutContext(NULL,NULL)) … … 57 57 else 58 58 { 59 if(SoundManager::device_s == NULL) 60 { 61 COUT(3) << "Sound: OpenAL: Open sound device..." << std::endl; 62 SoundManager::device_s = alcOpenDevice(NULL); 63 } 59 assert(this->device_ == NULL); 60 COUT(3) << "Sound: OpenAL: Open sound device..." << std::endl; 61 this->device_ = alcOpenDevice(NULL); 64 62 65 if( SoundManager::device_s== NULL)63 if(this->device_ == NULL) 66 64 { 67 65 COUT(2) << "Sound: OpenAL: Could not open sound device" << std::endl; … … 71 69 { 72 70 COUT(3) << "Sound: OpenAL: Sound device opened" << std::endl; 73 this->context_ = alcCreateContext( SoundManager::device_s, NULL);71 this->context_ = alcCreateContext(this->device_, NULL); 74 72 if(this->context_ == NULL) 75 73 { … … 99 97 100 98 alcDestroyContext(this->context_); 101 alcCloseDevice( SoundManager::device_s);99 alcCloseDevice(this->device_); 102 100 alutExit(); 103 101 } -
code/trunk/src/orxonox/sound/SoundManager.h
r3196 r3280 55 55 56 56 private: 57 static ALCdevice* device_s;57 ALCdevice* device_; 58 58 ALCcontext* context_; 59 59 std::list<SoundBase*> soundlist_; -
code/trunk/src/orxonox/tools/BillboardSet.cc
r3196 r3280 38 38 #include "util/Convert.h" 39 39 #include "util/Math.h" 40 #include "util/String .h"40 #include "util/StringUtils.h" 41 41 #include "core/GameMode.h" 42 42 … … 74 74 if (GameMode::showsGraphics()) 75 75 { 76 this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + convertToString(BillboardSet::billboardSetCounter_s++), count);76 this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + multi_cast<std::string>(BillboardSet::billboardSetCounter_s++), count); 77 77 this->billboardSet_->createBillboard(position); 78 78 this->billboardSet_->setMaterialName(file); … … 97 97 if (GameMode::showsGraphics()) 98 98 { 99 this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + convertToString(BillboardSet::billboardSetCounter_s++), count);99 this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + multi_cast<std::string>(BillboardSet::billboardSetCounter_s++), count); 100 100 this->billboardSet_->createBillboard(position, colour); 101 101 this->billboardSet_->setMaterialName(file); -
code/trunk/src/orxonox/tools/Mesh.cc
r3196 r3280 36 36 37 37 #include "util/Convert.h" 38 #include "util/String .h"38 #include "util/StringUtils.h" 39 39 #include "core/GameMode.h" 40 40 … … 68 68 try 69 69 { 70 this->entity_ = this->scenemanager_->createEntity("Mesh" + convertToString(Mesh::meshCounter_s++), meshsource);70 this->entity_ = this->scenemanager_->createEntity("Mesh" + multi_cast<std::string>(Mesh::meshCounter_s++), meshsource); 71 71 this->entity_->setCastShadows(this->bCastShadows_); 72 72 -
code/trunk/src/orxonox/tools/ParticleInterface.cc
r3196 r3280 51 51 ParticleInterface* ParticleInterface::currentParticleInterface_s = 0; 52 52 53 ParticleInterface::ParticleInterface(Ogre::SceneManager* scenemanager, const std::string& templateName, LODParticle:: LODdetaillevel)53 ParticleInterface::ParticleInterface(Ogre::SceneManager* scenemanager, const std::string& templateName, LODParticle::Value detaillevel) 54 54 { 55 55 RegisterObject(ParticleInterface); … … 69 69 try 70 70 { 71 this->particleSystem_ = this->scenemanager_->createParticleSystem("particles" + getConvertedValue<unsigned int,std::string>(ParticleInterface::counter_s++), templateName);71 this->particleSystem_ = this->scenemanager_->createParticleSystem("particles" + multi_cast<std::string>(ParticleInterface::counter_s++), templateName); 72 72 this->setSpeedFactor(1.0f); 73 73 } -
code/trunk/src/orxonox/tools/ParticleInterface.h
r3196 r3280 45 45 { 46 46 public: 47 ParticleInterface(Ogre::SceneManager* scenemanager, const std::string& templateName, LODParticle:: LODdetaillevel);47 ParticleInterface(Ogre::SceneManager* scenemanager, const std::string& templateName, LODParticle::Value detaillevel); 48 48 virtual ~ParticleInterface(); 49 49 -
code/trunk/src/orxonox/tools/TextureGenerator.cc
r3196 r3280 72 72 if (it == colourMap.end()) 73 73 { 74 std::string materialName = textureName + "_Material_" + convertToString(materialCount_s++);74 std::string materialName = textureName + "_Material_" + multi_cast<std::string>(materialCount_s++); 75 75 Ogre::MaterialPtr material = (Ogre::MaterialPtr)Ogre::MaterialManager::getSingleton().create(materialName, "General"); 76 76 material->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); -
code/trunk/src/util/CMakeLists.txt
r3196 r3280 29 29 SignalHandler.cc 30 30 Sleep.cc 31 String .cc31 StringUtils.cc 32 32 SubString.cc 33 33 ) -
code/trunk/src/util/Convert.h
r3234 r3280 43 43 44 44 #include "Debug.h" 45 #include "String .h"45 #include "StringUtils.h" 46 46 #include "TemplateUtils.h" 47 47 … … 316 316 } 317 317 318 // convert to string Shortcut319 template <class FromType>320 FORCEINLINE std::string convertToString(FromType value)321 {322 return getConvertedValue<FromType, std::string>(value);323 }324 325 // convert from string Shortcut326 template <class ToType>327 FORCEINLINE ToType convertFromString(std::string str)328 {329 return getConvertedValue<std::string, ToType>(str);330 }331 332 318 //////////////////////////////// 333 319 // Special string conversions // -
code/trunk/src/util/Exception.cc
r3196 r3280 64 64 std::ostringstream fullDesc; 65 65 66 fullDesc << this->getTypeName() << " _EXCEPTION";66 fullDesc << this->getTypeName() << "Exception"; 67 67 68 68 if (this->filename_ != "") … … 87 87 return fullDescription_; 88 88 } 89 90 //! Returns the error description 91 const char* Exception::what() const throw() 92 { 93 return getDescription().c_str(); 94 } 89 95 } -
code/trunk/src/util/Exception.h
r3196 r3280 68 68 //! Needed for compatibility with std::exception 69 69 virtual ~Exception() throw() { } 70 const char* what() const throw(); 70 71 71 72 //! Returns a full description with type, line, file and function … … 81 82 //! Returns the filename in which the exception occurred. 82 83 virtual const std::string& getFilename() const { return this->filename_; } 83 84 //! Returns a full description of the error.85 const char* what() const throw() { return getFullDescription().c_str(); }86 84 87 85 protected: … … 152 150 Exception description as string 153 151 */ 154 #define ThrowException(type, description , ...) \152 #define ThrowException(type, description) \ 155 153 throw orxonox::exceptionThrowerHelper(type##Exception(static_cast<std::ostringstream&>(std::ostringstream().flush() << description).str(), __LINE__, __FILE__, __FUNCTIONNAME__)) 156 154 -
code/trunk/src/util/Math.h
r3214 r3280 78 78 { 79 79 return (x >= 0) ? 1 : -1; 80 }81 82 /**83 @brief Returns the smaller of two values.84 */85 template <typename T>86 inline T min(T a, T b)87 {88 return (a <= b) ? a : b;89 }90 91 /**92 @brief Returns the greater of two values.93 */94 template <typename T>95 inline T max(T a, T b)96 {97 return (a >= b) ? a : b;98 80 } 99 81 -
code/trunk/src/util/MultiType.cc
r3196 r3280 41 41 @param type The type 42 42 */ 43 bool MultiType::convert(MT_Type type)43 bool MultiType::convert(MT_Type::Value type) 44 44 { 45 45 switch (type) 46 46 { 47 case MT_ null:47 case MT_Type::Null: 48 48 this->reset(); return true; 49 case MT_ char:49 case MT_Type::Char: 50 50 return this->convert<char>(); break; 51 case MT_ uchar:51 case MT_Type::UnsignedChar: 52 52 return this->convert<unsigned char>(); break; 53 case MT_ short:53 case MT_Type::Short: 54 54 return this->convert<short>(); break; 55 case MT_ ushort:55 case MT_Type::UnsignedShort: 56 56 return this->convert<unsigned short>(); break; 57 case MT_ int:57 case MT_Type::Int: 58 58 return this->convert<int>(); break; 59 case MT_ uint:59 case MT_Type::UnsignedInt: 60 60 return this->convert<unsigned int>(); break; 61 case MT_ long:61 case MT_Type::Long: 62 62 return this->convert<long>(); break; 63 case MT_ ulong:63 case MT_Type::UnsignedLong: 64 64 return this->convert<unsigned long>(); break; 65 case MT_ longlong:65 case MT_Type::LongLong: 66 66 return this->convert<long long>(); break; 67 case MT_ ulonglong:67 case MT_Type::UnsignedLongLong: 68 68 return this->convert<unsigned long long>(); break; 69 case MT_ float:69 case MT_Type::Float: 70 70 return this->convert<float>(); break; 71 case MT_ double:71 case MT_Type::Double: 72 72 return this->convert<double>(); break; 73 case MT_ longdouble:73 case MT_Type::LongDouble: 74 74 return this->convert<long double>(); break; 75 case MT_ bool:75 case MT_Type::Bool: 76 76 return this->convert<bool>(); break; 77 case MT_ void:77 case MT_Type::VoidPointer: 78 78 return this->convert<void*>(); break; 79 case MT_ string:79 case MT_Type::String: 80 80 return this->convert<std::string>(); break; 81 case MT_ vector2:81 case MT_Type::Vector2: 82 82 return this->convert<orxonox::Vector2>(); break; 83 case MT_ vector3:83 case MT_Type::Vector3: 84 84 return this->convert<orxonox::Vector3>(); break; 85 case MT_ vector4:85 case MT_Type::Vector4: 86 86 return this->convert<orxonox::Vector4>(); break; 87 case MT_ colourvalue:87 case MT_Type::ColourValue: 88 88 return this->convert<orxonox::ColourValue>(); break; 89 case MT_ quaternion:89 case MT_Type::Quaternion: 90 90 return this->convert<orxonox::Quaternion>(); break; 91 case MT_ radian:91 case MT_Type::Radian: 92 92 return this->convert<orxonox::Radian>(); break; 93 case MT_ degree:93 case MT_Type::Degree: 94 94 return this->convert<orxonox::Degree>(); break; 95 95 default: … … 104 104 std::string MultiType::getTypename() const 105 105 { 106 MT_Type type = (this->value_) ? this->value_->type_ : MT_null;106 MT_Type::Value type = (this->value_) ? this->value_->type_ : MT_Type::Null; 107 107 108 108 switch (type) 109 109 { 110 case MT_ char:110 case MT_Type::Char: 111 111 return "char"; break; 112 case MT_ uchar:112 case MT_Type::UnsignedChar: 113 113 return "unsigned char"; break; 114 case MT_ short:114 case MT_Type::Short: 115 115 return "short"; break; 116 case MT_ ushort:116 case MT_Type::UnsignedShort: 117 117 return "unsigned short"; break; 118 case MT_ int:118 case MT_Type::Int: 119 119 return "int"; break; 120 case MT_ uint:120 case MT_Type::UnsignedInt: 121 121 return "unsigned int"; break; 122 case MT_ long:122 case MT_Type::Long: 123 123 return "long"; break; 124 case MT_ ulong:124 case MT_Type::UnsignedLong: 125 125 return "unsigned long"; break; 126 case MT_ longlong:126 case MT_Type::LongLong: 127 127 return "long long"; break; 128 case MT_ ulonglong:128 case MT_Type::UnsignedLongLong: 129 129 return "unsigned long long"; break; 130 case MT_ float:130 case MT_Type::Float: 131 131 return "float"; break; 132 case MT_ double:132 case MT_Type::Double: 133 133 return "double"; break; 134 case MT_ longdouble:134 case MT_Type::LongDouble: 135 135 return "long double"; break; 136 case MT_ bool:136 case MT_Type::Bool: 137 137 return "bool"; break; 138 case MT_ void:138 case MT_Type::VoidPointer: 139 139 return "void*"; break; 140 case MT_ string:140 case MT_Type::String: 141 141 return "std::string"; break; 142 case MT_ vector2:142 case MT_Type::Vector2: 143 143 return "orxonox::Vector2"; break; 144 case MT_ vector3:144 case MT_Type::Vector3: 145 145 return "orxonox::Vector3"; break; 146 case MT_ vector4:146 case MT_Type::Vector4: 147 147 return "orxonox::Vector4"; break; 148 case MT_ colourvalue:148 case MT_Type::ColourValue: 149 149 return "orxonox::ColourValue"; break; 150 case MT_ quaternion:150 case MT_Type::Quaternion: 151 151 return "orxonox::Quaternion"; break; 152 case MT_ radian:152 case MT_Type::Radian: 153 153 return "orxonox::Radian"; break; 154 case MT_ degree:154 case MT_Type::Degree: 155 155 return "orxonox::Degree"; break; 156 156 default: … … 159 159 } 160 160 161 MultiType::operator char() const { return (this->value_) ? ((this->value_->type_ == MT_ char) ? (static_cast<MT_Value<char> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */162 MultiType::operator unsigned char() const { return (this->value_) ? ((this->value_->type_ == MT_ uchar) ? (static_cast<MT_Value<unsigned char> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */163 MultiType::operator short() const { return (this->value_) ? ((this->value_->type_ == MT_ short) ? (static_cast<MT_Value<short> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */164 MultiType::operator unsigned short() const { return (this->value_) ? ((this->value_->type_ == MT_ ushort) ? (static_cast<MT_Value<unsigned short> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */165 MultiType::operator int() const { return (this->value_) ? ((this->value_->type_ == MT_ int) ? (static_cast<MT_Value<int> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */166 MultiType::operator unsigned int() const { return (this->value_) ? ((this->value_->type_ == MT_ uint) ? (static_cast<MT_Value<unsigned int> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */167 MultiType::operator long() const { return (this->value_) ? ((this->value_->type_ == MT_ long) ? (static_cast<MT_Value<long> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */168 MultiType::operator unsigned long() const { return (this->value_) ? ((this->value_->type_ == MT_ ulong) ? (static_cast<MT_Value<unsigned long> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */169 MultiType::operator long long() const { return (this->value_) ? ((this->value_->type_ == MT_ longlong) ? (static_cast<MT_Value<long long> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */170 MultiType::operator unsigned long long() const { return (this->value_) ? ((this->value_->type_ == MT_ ulonglong) ? (static_cast<MT_Value<unsigned long long> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */171 MultiType::operator float() const { return (this->value_) ? ((this->value_->type_ == MT_ float) ? (static_cast<MT_Value<float> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */172 MultiType::operator double() const { return (this->value_) ? ((this->value_->type_ == MT_ double) ? (static_cast<MT_Value<double> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */173 MultiType::operator long double() const { return (this->value_) ? ((this->value_->type_ == MT_ longdouble) ? (static_cast<MT_Value<long double> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */174 MultiType::operator bool() const { return (this->value_) ? ((this->value_->type_ == MT_ bool) ? (static_cast<MT_Value<bool> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */175 MultiType::operator void*() const { return (this->value_) ? ((this->value_->type_ == MT_ void) ? (static_cast<MT_Value<void*> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */176 MultiType::operator std::string() const { return (this->value_) ? ((this->value_->type_ == MT_ string) ? (static_cast<MT_Value<std::string> *>(this->value_))->value_ : (*this->value_)) : NilValue<std::string>(); } /** @brief Returns the current value, converted to the requested type. */177 MultiType::operator orxonox::Vector2() const { return (this->value_) ? ((this->value_->type_ == MT_ vector2) ? (static_cast<MT_Value<orxonox::Vector2> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector2>(); } /** @brief Returns the current value, converted to the requested type. */178 MultiType::operator orxonox::Vector3() const { return (this->value_) ? ((this->value_->type_ == MT_ vector3) ? (static_cast<MT_Value<orxonox::Vector3> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector3>(); } /** @brief Returns the current value, converted to the requested type. */179 MultiType::operator orxonox::Vector4() const { return (this->value_) ? ((this->value_->type_ == MT_ vector4) ? (static_cast<MT_Value<orxonox::Vector4> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector4>(); } /** @brief Returns the current value, converted to the requested type. */180 MultiType::operator orxonox::ColourValue() const { return (this->value_) ? ((this->value_->type_ == MT_ colourvalue) ? (static_cast<MT_Value<orxonox::ColourValue>*>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::ColourValue>(); } /** @brief Returns the current value, converted to the requested type. */181 MultiType::operator orxonox::Quaternion() const { return (this->value_) ? ((this->value_->type_ == MT_ quaternion) ? (static_cast<MT_Value<orxonox::Quaternion> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Quaternion>(); } /** @brief Returns the current value, converted to the requested type. */182 MultiType::operator orxonox::Radian() const { return (this->value_) ? ((this->value_->type_ == MT_ radian) ? (static_cast<MT_Value<orxonox::Radian> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Radian>(); } /** @brief Returns the current value, converted to the requested type. */183 MultiType::operator orxonox::Degree() const { return (this->value_) ? ((this->value_->type_ == MT_ degree) ? (static_cast<MT_Value<orxonox::Degree> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Degree>(); } /** @brief Returns the current value, converted to the requested type. */184 185 template <> void MultiType::createNewValueContainer(const char& value) { this->value_ = new MT_Value<char> (value, MT_ char); } /** @brief Creates a new value container for the given type. */186 template <> void MultiType::createNewValueContainer(const unsigned char& value) { this->value_ = new MT_Value<unsigned char> (value, MT_ uchar); } /** @brief Creates a new value container for the given type. */187 template <> void MultiType::createNewValueContainer(const short& value) { this->value_ = new MT_Value<short> (value, MT_ short); } /** @brief Creates a new value container for the given type. */188 template <> void MultiType::createNewValueContainer(const unsigned short& value) { this->value_ = new MT_Value<unsigned short> (value, MT_ ushort); } /** @brief Creates a new value container for the given type. */189 template <> void MultiType::createNewValueContainer(const int& value) { this->value_ = new MT_Value<int> (value, MT_ int); } /** @brief Creates a new value container for the given type. */190 template <> void MultiType::createNewValueContainer(const unsigned int& value) { this->value_ = new MT_Value<unsigned int> (value, MT_ uint); } /** @brief Creates a new value container for the given type. */191 template <> void MultiType::createNewValueContainer(const long& value) { this->value_ = new MT_Value<long> (value, MT_ long); } /** @brief Creates a new value container for the given type. */192 template <> void MultiType::createNewValueContainer(const unsigned long& value) { this->value_ = new MT_Value<unsigned long> (value, MT_ ulong); } /** @brief Creates a new value container for the given type. */193 template <> void MultiType::createNewValueContainer(const long long& value) { this->value_ = new MT_Value<long long> (value, MT_ longlong); } /** @brief Creates a new value container for the given type. */194 template <> void MultiType::createNewValueContainer(const unsigned long long& value) { this->value_ = new MT_Value<unsigned long long> (value, MT_ ulonglong); } /** @brief Creates a new value container for the given type. */195 template <> void MultiType::createNewValueContainer(const float& value) { this->value_ = new MT_Value<float> (value, MT_ float); } /** @brief Creates a new value container for the given type. */196 template <> void MultiType::createNewValueContainer(const double& value) { this->value_ = new MT_Value<double> (value, MT_ double); } /** @brief Creates a new value container for the given type. */197 template <> void MultiType::createNewValueContainer(const long double& value) { this->value_ = new MT_Value<long double> (value, MT_ longdouble); } /** @brief Creates a new value container for the given type. */198 template <> void MultiType::createNewValueContainer(const bool& value) { this->value_ = new MT_Value<bool> (value, MT_ bool); } /** @brief Creates a new value container for the given type. */199 template <> void MultiType::createNewValueContainer( void* const& value) { this->value_ = new MT_Value<void*> (value, MT_ void); } /** @brief Creates a new value container for the given type. */200 template <> void MultiType::createNewValueContainer(const std::string& value) { this->value_ = new MT_Value<std::string> (value, MT_ string); } /** @brief Creates a new value container for the given type. */201 template <> void MultiType::createNewValueContainer(const orxonox::Vector2& value) { this->value_ = new MT_Value<orxonox::Vector2> (value, MT_ vector2); } /** @brief Creates a new value container for the given type. */202 template <> void MultiType::createNewValueContainer(const orxonox::Vector3& value) { this->value_ = new MT_Value<orxonox::Vector3> (value, MT_ vector3); } /** @brief Creates a new value container for the given type. */203 template <> void MultiType::createNewValueContainer(const orxonox::Vector4& value) { this->value_ = new MT_Value<orxonox::Vector4> (value, MT_ vector4); } /** @brief Creates a new value container for the given type. */204 template <> void MultiType::createNewValueContainer(const orxonox::ColourValue& value) { this->value_ = new MT_Value<orxonox::ColourValue>(value, MT_ colourvalue); } /** @brief Creates a new value container for the given type. */205 template <> void MultiType::createNewValueContainer(const orxonox::Quaternion& value) { this->value_ = new MT_Value<orxonox::Quaternion> (value, MT_ quaternion); } /** @brief Creates a new value container for the given type. */206 template <> void MultiType::createNewValueContainer(const orxonox::Radian& value) { this->value_ = new MT_Value<orxonox::Radian> (value, MT_ radian); } /** @brief Creates a new value container for the given type. */207 template <> void MultiType::createNewValueContainer(const orxonox::Degree& value) { this->value_ = new MT_Value<orxonox::Degree> (value, MT_ degree); } /** @brief Creates a new value container for the given type. */161 MultiType::operator char() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Char ) ? (static_cast<MT_Value<char> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 162 MultiType::operator unsigned char() const { return (this->value_) ? ((this->value_->type_ == MT_Type::UnsignedChar ) ? (static_cast<MT_Value<unsigned char> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 163 MultiType::operator short() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Short ) ? (static_cast<MT_Value<short> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 164 MultiType::operator unsigned short() const { return (this->value_) ? ((this->value_->type_ == MT_Type::UnsignedShort ) ? (static_cast<MT_Value<unsigned short> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 165 MultiType::operator int() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Int ) ? (static_cast<MT_Value<int> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 166 MultiType::operator unsigned int() const { return (this->value_) ? ((this->value_->type_ == MT_Type::UnsignedInt ) ? (static_cast<MT_Value<unsigned int> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 167 MultiType::operator long() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Long ) ? (static_cast<MT_Value<long> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 168 MultiType::operator unsigned long() const { return (this->value_) ? ((this->value_->type_ == MT_Type::UnsignedLong ) ? (static_cast<MT_Value<unsigned long> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 169 MultiType::operator long long() const { return (this->value_) ? ((this->value_->type_ == MT_Type::LongLong ) ? (static_cast<MT_Value<long long> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 170 MultiType::operator unsigned long long() const { return (this->value_) ? ((this->value_->type_ == MT_Type::UnsignedLongLong) ? (static_cast<MT_Value<unsigned long long> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 171 MultiType::operator float() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Float ) ? (static_cast<MT_Value<float> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 172 MultiType::operator double() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Double ) ? (static_cast<MT_Value<double> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 173 MultiType::operator long double() const { return (this->value_) ? ((this->value_->type_ == MT_Type::LongDouble ) ? (static_cast<MT_Value<long double> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 174 MultiType::operator bool() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Bool ) ? (static_cast<MT_Value<bool> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 175 MultiType::operator void*() const { return (this->value_) ? ((this->value_->type_ == MT_Type::VoidPointer ) ? (static_cast<MT_Value<void*> *>(this->value_))->value_ : (*this->value_)) : 0; } /** @brief Returns the current value, converted to the requested type. */ 176 MultiType::operator std::string() const { return (this->value_) ? ((this->value_->type_ == MT_Type::String ) ? (static_cast<MT_Value<std::string> *>(this->value_))->value_ : (*this->value_)) : NilValue<std::string>(); } /** @brief Returns the current value, converted to the requested type. */ 177 MultiType::operator orxonox::Vector2() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Vector2 ) ? (static_cast<MT_Value<orxonox::Vector2> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector2>(); } /** @brief Returns the current value, converted to the requested type. */ 178 MultiType::operator orxonox::Vector3() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Vector3 ) ? (static_cast<MT_Value<orxonox::Vector3> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector3>(); } /** @brief Returns the current value, converted to the requested type. */ 179 MultiType::operator orxonox::Vector4() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Vector4 ) ? (static_cast<MT_Value<orxonox::Vector4> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector4>(); } /** @brief Returns the current value, converted to the requested type. */ 180 MultiType::operator orxonox::ColourValue() const { return (this->value_) ? ((this->value_->type_ == MT_Type::ColourValue ) ? (static_cast<MT_Value<orxonox::ColourValue>*>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::ColourValue>(); } /** @brief Returns the current value, converted to the requested type. */ 181 MultiType::operator orxonox::Quaternion() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Quaternion ) ? (static_cast<MT_Value<orxonox::Quaternion> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Quaternion>(); } /** @brief Returns the current value, converted to the requested type. */ 182 MultiType::operator orxonox::Radian() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Radian ) ? (static_cast<MT_Value<orxonox::Radian> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Radian>(); } /** @brief Returns the current value, converted to the requested type. */ 183 MultiType::operator orxonox::Degree() const { return (this->value_) ? ((this->value_->type_ == MT_Type::Degree ) ? (static_cast<MT_Value<orxonox::Degree> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Degree>(); } /** @brief Returns the current value, converted to the requested type. */ 184 185 template <> void MultiType::createNewValueContainer(const char& value) { this->value_ = new MT_Value<char> (value, MT_Type::Char ); } /** @brief Creates a new value container for the given type. */ 186 template <> void MultiType::createNewValueContainer(const unsigned char& value) { this->value_ = new MT_Value<unsigned char> (value, MT_Type::UnsignedChar ); } /** @brief Creates a new value container for the given type. */ 187 template <> void MultiType::createNewValueContainer(const short& value) { this->value_ = new MT_Value<short> (value, MT_Type::Short ); } /** @brief Creates a new value container for the given type. */ 188 template <> void MultiType::createNewValueContainer(const unsigned short& value) { this->value_ = new MT_Value<unsigned short> (value, MT_Type::UnsignedShort ); } /** @brief Creates a new value container for the given type. */ 189 template <> void MultiType::createNewValueContainer(const int& value) { this->value_ = new MT_Value<int> (value, MT_Type::Int ); } /** @brief Creates a new value container for the given type. */ 190 template <> void MultiType::createNewValueContainer(const unsigned int& value) { this->value_ = new MT_Value<unsigned int> (value, MT_Type::UnsignedInt ); } /** @brief Creates a new value container for the given type. */ 191 template <> void MultiType::createNewValueContainer(const long& value) { this->value_ = new MT_Value<long> (value, MT_Type::Long ); } /** @brief Creates a new value container for the given type. */ 192 template <> void MultiType::createNewValueContainer(const unsigned long& value) { this->value_ = new MT_Value<unsigned long> (value, MT_Type::UnsignedLong ); } /** @brief Creates a new value container for the given type. */ 193 template <> void MultiType::createNewValueContainer(const long long& value) { this->value_ = new MT_Value<long long> (value, MT_Type::LongLong ); } /** @brief Creates a new value container for the given type. */ 194 template <> void MultiType::createNewValueContainer(const unsigned long long& value) { this->value_ = new MT_Value<unsigned long long> (value, MT_Type::UnsignedLongLong); } /** @brief Creates a new value container for the given type. */ 195 template <> void MultiType::createNewValueContainer(const float& value) { this->value_ = new MT_Value<float> (value, MT_Type::Float ); } /** @brief Creates a new value container for the given type. */ 196 template <> void MultiType::createNewValueContainer(const double& value) { this->value_ = new MT_Value<double> (value, MT_Type::Double ); } /** @brief Creates a new value container for the given type. */ 197 template <> void MultiType::createNewValueContainer(const long double& value) { this->value_ = new MT_Value<long double> (value, MT_Type::LongDouble ); } /** @brief Creates a new value container for the given type. */ 198 template <> void MultiType::createNewValueContainer(const bool& value) { this->value_ = new MT_Value<bool> (value, MT_Type::Bool ); } /** @brief Creates a new value container for the given type. */ 199 template <> void MultiType::createNewValueContainer( void* const& value) { this->value_ = new MT_Value<void*> (value, MT_Type::VoidPointer ); } /** @brief Creates a new value container for the given type. */ 200 template <> void MultiType::createNewValueContainer(const std::string& value) { this->value_ = new MT_Value<std::string> (value, MT_Type::String ); } /** @brief Creates a new value container for the given type. */ 201 template <> void MultiType::createNewValueContainer(const orxonox::Vector2& value) { this->value_ = new MT_Value<orxonox::Vector2> (value, MT_Type::Vector2 ); } /** @brief Creates a new value container for the given type. */ 202 template <> void MultiType::createNewValueContainer(const orxonox::Vector3& value) { this->value_ = new MT_Value<orxonox::Vector3> (value, MT_Type::Vector3 ); } /** @brief Creates a new value container for the given type. */ 203 template <> void MultiType::createNewValueContainer(const orxonox::Vector4& value) { this->value_ = new MT_Value<orxonox::Vector4> (value, MT_Type::Vector4 ); } /** @brief Creates a new value container for the given type. */ 204 template <> void MultiType::createNewValueContainer(const orxonox::ColourValue& value) { this->value_ = new MT_Value<orxonox::ColourValue>(value, MT_Type::ColourValue ); } /** @brief Creates a new value container for the given type. */ 205 template <> void MultiType::createNewValueContainer(const orxonox::Quaternion& value) { this->value_ = new MT_Value<orxonox::Quaternion> (value, MT_Type::Quaternion ); } /** @brief Creates a new value container for the given type. */ 206 template <> void MultiType::createNewValueContainer(const orxonox::Radian& value) { this->value_ = new MT_Value<orxonox::Radian> (value, MT_Type::Radian ); } /** @brief Creates a new value container for the given type. */ 207 template <> void MultiType::createNewValueContainer(const orxonox::Degree& value) { this->value_ = new MT_Value<orxonox::Degree> (value, MT_Type::Degree ); } /** @brief Creates a new value container for the given type. */ 208 208 } -
code/trunk/src/util/MultiType.h
r3241 r3280 84 84 @brief Enum of all possible types of a MultiType. 85 85 */ 86 enumMT_Type86 namespace MT_Type 87 87 { 88 MT_null=0, 89 MT_char=1, 90 MT_uchar=2, 91 MT_short=3, 92 MT_ushort=4, 93 MT_int=5, 94 MT_uint=6, 95 MT_long=7, 96 MT_ulong=8, 97 MT_longlong=9, 98 MT_ulonglong=10, 99 MT_float=11, 100 MT_double=12, 101 MT_longdouble=13, 102 MT_bool=14, 103 MT_void=15, 104 MT_string=16, 105 MT_vector2=17, 106 MT_vector3=18, 107 MT_vector4=19, 108 MT_colourvalue=20, 109 MT_quaternion=21, 110 MT_radian=22, 111 MT_degree=23 112 }; 88 enum Value 89 { 90 Null, 91 Char, 92 UnsignedChar, 93 Short, 94 UnsignedShort, 95 Int, 96 UnsignedInt, 97 Long, 98 UnsignedLong, 99 LongLong, 100 UnsignedLongLong, 101 Float, 102 Double, 103 LongDouble, 104 Bool, 105 VoidPointer, 106 String, 107 Vector2, 108 Vector3, 109 Vector4, 110 ColourValue, 111 Quaternion, 112 Radian, 113 Degree 114 }; 115 } 113 116 114 117 /** … … 142 145 { 143 146 public: 144 MT_ValueBase(MT_Type type) : type_(type), bHasDefaultValue_(false) {}147 MT_ValueBase(MT_Type::Value type) : type_(type), bHasDefaultValue_(false) {} 145 148 virtual ~MT_ValueBase() {} 146 149 … … 151 154 152 155 /** @brief Returns the type of the current value. */ 153 const MT_Type & getType() const { return this->type_; }156 const MT_Type::Value& getType() const { return this->type_; } 154 157 155 158 /** @brief Checks whether the value is a default one. */ … … 234 237 virtual uint8_t getSize() const=0; 235 238 236 MT_Type type_;//!< The type of the current value239 MT_Type::Value type_; //!< The type of the current value 237 240 bool bHasDefaultValue_; //!< True if the last conversion wasn't successful 238 241 }; … … 265 268 inline MultiType(const char* value) : value_(0) { this->setValue(std::string(value)); } /** @brief Constructor: Converts the char array to a std::string, assigns the value and sets the type. */ 266 269 inline MultiType(const MultiType& other) : value_(0) { this->setValue(other); } /** @brief Copyconstructor: Assigns value and type of the other MultiType. */ 267 inline MultiType(MT_Type type): value_(0) { this->setType(type); } /** @brief Constructor: Sets the type, the next assignment will determine the value. */270 inline MultiType(MT_Type::Value type) : value_(0) { this->setType(type); } /** @brief Constructor: Sets the type, the next assignment will determine the value. */ 268 271 269 272 /** @brief Destructor: Deletes the MT_Value. */ … … 273 276 template <typename V> inline const MultiType& operator=(V* value) { this->setValue(value); return (*this); } /** @brief Assigns a pointer. */ 274 277 inline const MultiType& operator=(const MultiType& other) { this->setValue(other); return (*this); } /** @brief Assigns the value of the other MultiType and converts it to the current type of the MultiType. */ 275 inline const MultiType& operator=(MT_Type type){ this->setType(type); return (*this); } /** @brief Resets the value and changes the type. */278 inline const MultiType& operator=(MT_Type::Value type) { this->setType(type); return (*this); } /** @brief Resets the value and changes the type. */ 276 279 277 280 inline bool setValue(const char& value); … … 312 315 template <typename T> inline bool convert() { return this->setValue<T>((T)(*this)); } /** @brief Converts the current value to type T. */ 313 316 inline bool convert(const MultiType& other) { return this->convert(other.getType()); } /** @brief Converts the current value to the type of the other MultiType. */ 314 bool convert(MT_Type type);315 316 /** @brief Current content gets deleted. New type is MT_ null */317 bool convert(MT_Type::Value type); 318 319 /** @brief Current content gets deleted. New type is MT_Type::Null */ 317 320 inline void reset() { if (this->value_) delete this->value_; this->value_ = 0; } 318 321 /** @brief Current content gets overridden with default zero value */ … … 321 324 template <typename T> inline void setType() { this->assignValue(typename TypeStripper<T>::RawType()); } /** @brief Resets the value and changes the internal type to T. */ 322 325 inline void setType(const MultiType& other) { this->setType(other.getType()); } /** @brief Resets the value and changes the internal type to the type of the other MultiType. */ 323 inline void setType(MT_Type type){ this->reset(); this->convert(type); this->resetValue(); } /** @brief Resets the value and changes the internal type to the given type. */326 inline void setType(MT_Type::Value type) { this->reset(); this->convert(type); this->resetValue(); } /** @brief Resets the value and changes the internal type to the given type. */ 324 327 325 328 /** @brief Returns the current type. */ 326 inline MT_Type getType() const { return (this->value_) ? this->value_->type_ : MT_null; }329 inline MT_Type::Value getType() const { return (this->value_) ? this->value_->type_ : MT_Type::Null; } 327 330 /** @brief Returns true if the current type equals the given type. */ 328 inline bool isType(MT_Type type) const { return (this->value_) ? (this->value_->type_ == type) : (type == MT_null); }331 inline bool isType(MT_Type::Value type) const { return (this->value_) ? (this->value_->type_ == type) : (type == MT_Type::Null); } 329 332 /** @brief Returns true if the current type is T. */ 330 template <typename T> inline bool isType() const { return false; } // Only works for specialized values - see below331 std::string getTypename() const;333 template <typename T> inline bool isType() const { return false; } // Only works for specialized values - see below 334 std::string getTypename() const; 332 335 333 336 /** @brief Saves the value of the MT to a bytestream (pointed at by mem) and increases mem pointer by size of MT */ 334 inline void exportData(uint8_t*& mem) const { assert(sizeof(MT_Type )<=8); *(uint8_t*)(mem) = this->getType(); mem+=sizeof(uint8_t); this->value_->exportData(mem); }337 inline void exportData(uint8_t*& mem) const { assert(sizeof(MT_Type::Value)<=8); *(uint8_t*)(mem) = this->getType(); mem+=sizeof(uint8_t); this->value_->exportData(mem); } 335 338 /** @brief Loads the value of the MT from a bytestream (pointed at by mem) and increases mem pointer by size of MT */ 336 inline void importData(uint8_t*& mem) { assert(sizeof(MT_Type )<=8); this->setType(static_cast<MT_Type>(*(uint8_t*)mem)); mem+=sizeof(uint8_t); this->value_->importData(mem); }339 inline void importData(uint8_t*& mem) { assert(sizeof(MT_Type::Value)<=8); this->setType(static_cast<MT_Type::Value>(*(uint8_t*)mem)); mem+=sizeof(uint8_t); this->value_->importData(mem); } 337 340 /** @brief Saves the value of the MT to a bytestream and increases pointer to bytestream by size of MT */ 338 341 inline uint8_t*& operator << (uint8_t*& mem) { importData(mem); return mem; } … … 420 423 421 424 private: 422 inline bool assignValue(const char& value) { if (this->value_ && this->value_->type_ == MT_ char){ return this->value_->setValue(value); } else { this->changeValueContainer<char>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */423 inline bool assignValue(const unsigned char& value) { if (this->value_ && this->value_->type_ == MT_ uchar){ return this->value_->setValue(value); } else { this->changeValueContainer<unsigned char>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */424 inline bool assignValue(const short& value) { if (this->value_ && this->value_->type_ == MT_ short){ return this->value_->setValue(value); } else { this->changeValueContainer<short>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */425 inline bool assignValue(const unsigned short& value) { if (this->value_ && this->value_->type_ == MT_ ushort){ return this->value_->setValue(value); } else { this->changeValueContainer<unsigned short>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */426 inline bool assignValue(const int& value) { if (this->value_ && this->value_->type_ == MT_ int){ return this->value_->setValue(value); } else { this->changeValueContainer<int>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */427 inline bool assignValue(const unsigned int& value) { if (this->value_ && this->value_->type_ == MT_ uint){ return this->value_->setValue(value); } else { this->changeValueContainer<unsigned int>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */428 inline bool assignValue(const long& value) { if (this->value_ && this->value_->type_ == MT_ long){ return this->value_->setValue(value); } else { this->changeValueContainer<long>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */429 inline bool assignValue(const unsigned long& value) { if (this->value_ && this->value_->type_ == MT_ ulong){ return this->value_->setValue(value); } else { this->changeValueContainer<unsigned long>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */430 inline bool assignValue(const long long& value) { if (this->value_ && this->value_->type_ == MT_ longlong){ return this->value_->setValue(value); } else { this->changeValueContainer<long long>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */431 inline bool assignValue(const unsigned long long& value) { if (this->value_ && this->value_->type_ == MT_ ulonglong){ return this->value_->setValue(value); } else { this->changeValueContainer<unsigned long long>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */432 inline bool assignValue(const float& value) { if (this->value_ && this->value_->type_ == MT_ float){ return this->value_->setValue(value); } else { this->changeValueContainer<float>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */433 inline bool assignValue(const double& value) { if (this->value_ && this->value_->type_ == MT_ double){ return this->value_->setValue(value); } else { this->changeValueContainer<double>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */434 inline bool assignValue(const long double& value) { if (this->value_ && this->value_->type_ == MT_ longdouble){ return this->value_->setValue(value); } else { this->changeValueContainer<long double>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */435 inline bool assignValue(const bool& value) { if (this->value_ && this->value_->type_ == MT_ bool){ return this->value_->setValue(value); } else { this->changeValueContainer<bool>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */436 inline bool assignValue( void* const& value) { if (this->value_ && this->value_->type_ == MT_ void){ return this->value_->setValue(value); } else { this->changeValueContainer<void*>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */437 inline bool assignValue(const std::string& value) { if (this->value_ && this->value_->type_ == MT_ string){ return this->value_->setValue(value); } else { this->changeValueContainer<std::string>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */438 inline bool assignValue(const orxonox::Vector2& value) { if (this->value_ && this->value_->type_ == MT_ vector2){ return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector2>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */439 inline bool assignValue(const orxonox::Vector3& value) { if (this->value_ && this->value_->type_ == MT_ vector3){ return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector3>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */440 inline bool assignValue(const orxonox::Vector4& value) { if (this->value_ && this->value_->type_ == MT_ vector4){ return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector4>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */441 inline bool assignValue(const orxonox::ColourValue& value) { if (this->value_ && this->value_->type_ == MT_ colourvalue){ return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::ColourValue>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */442 inline bool assignValue(const orxonox::Quaternion& value) { if (this->value_ && this->value_->type_ == MT_ quaternion){ return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Quaternion>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */443 inline bool assignValue(const orxonox::Radian& value) { if (this->value_ && this->value_->type_ == MT_ radian){ return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Radian>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */444 inline bool assignValue(const orxonox::Degree& value) { if (this->value_ && this->value_->type_ == MT_ degree){ return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Degree>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */425 inline bool assignValue(const char& value) { if (this->value_ && this->value_->type_ == MT_Type::Char) { return this->value_->setValue(value); } else { this->changeValueContainer<char>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 426 inline bool assignValue(const unsigned char& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedChar) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned char>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 427 inline bool assignValue(const short& value) { if (this->value_ && this->value_->type_ == MT_Type::Short) { return this->value_->setValue(value); } else { this->changeValueContainer<short>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 428 inline bool assignValue(const unsigned short& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedShort) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned short>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 429 inline bool assignValue(const int& value) { if (this->value_ && this->value_->type_ == MT_Type::Int) { return this->value_->setValue(value); } else { this->changeValueContainer<int>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 430 inline bool assignValue(const unsigned int& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedInt) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned int>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 431 inline bool assignValue(const long& value) { if (this->value_ && this->value_->type_ == MT_Type::Long) { return this->value_->setValue(value); } else { this->changeValueContainer<long>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 432 inline bool assignValue(const unsigned long& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedLong) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned long>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 433 inline bool assignValue(const long long& value) { if (this->value_ && this->value_->type_ == MT_Type::LongLong) { return this->value_->setValue(value); } else { this->changeValueContainer<long long>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 434 inline bool assignValue(const unsigned long long& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedLongLong) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned long long>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 435 inline bool assignValue(const float& value) { if (this->value_ && this->value_->type_ == MT_Type::Float) { return this->value_->setValue(value); } else { this->changeValueContainer<float>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 436 inline bool assignValue(const double& value) { if (this->value_ && this->value_->type_ == MT_Type::Double) { return this->value_->setValue(value); } else { this->changeValueContainer<double>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 437 inline bool assignValue(const long double& value) { if (this->value_ && this->value_->type_ == MT_Type::LongDouble) { return this->value_->setValue(value); } else { this->changeValueContainer<long double>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 438 inline bool assignValue(const bool& value) { if (this->value_ && this->value_->type_ == MT_Type::Bool) { return this->value_->setValue(value); } else { this->changeValueContainer<bool>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 439 inline bool assignValue( void* const& value) { if (this->value_ && this->value_->type_ == MT_Type::VoidPointer) { return this->value_->setValue(value); } else { this->changeValueContainer<void*>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 440 inline bool assignValue(const std::string& value) { if (this->value_ && this->value_->type_ == MT_Type::String) { return this->value_->setValue(value); } else { this->changeValueContainer<std::string>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 441 inline bool assignValue(const orxonox::Vector2& value) { if (this->value_ && this->value_->type_ == MT_Type::Vector2) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector2>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 442 inline bool assignValue(const orxonox::Vector3& value) { if (this->value_ && this->value_->type_ == MT_Type::Vector3) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector3>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 443 inline bool assignValue(const orxonox::Vector4& value) { if (this->value_ && this->value_->type_ == MT_Type::Vector4) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector4>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 444 inline bool assignValue(const orxonox::ColourValue& value) { if (this->value_ && this->value_->type_ == MT_Type::ColourValue) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::ColourValue>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 445 inline bool assignValue(const orxonox::Quaternion& value) { if (this->value_ && this->value_->type_ == MT_Type::Quaternion) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Quaternion>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 446 inline bool assignValue(const orxonox::Radian& value) { if (this->value_ && this->value_->type_ == MT_Type::Radian) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Radian>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 447 inline bool assignValue(const orxonox::Degree& value) { if (this->value_ && this->value_->type_ == MT_Type::Degree) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Degree>(value); return true; } } /** @brief Assigns a new value by changing type and creating a new container. */ 445 448 446 449 /** @brief Changes the value container. */ … … 455 458 _UtilExport inline std::ostream& operator<<(std::ostream& outstream, const MultiType& mt) { if (mt.value_) { mt.value_->toString(outstream); } return outstream; } 456 459 457 template <> inline bool MultiType::isType<char>() const { return (this->value_ && this->value_->type_ == MT_ char);} /** @brief Returns true if the current type equals the given type. */458 template <> inline bool MultiType::isType<unsigned char>() const { return (this->value_ && this->value_->type_ == MT_ uchar);} /** @brief Returns true if the current type equals the given type. */459 template <> inline bool MultiType::isType<short>() const { return (this->value_ && this->value_->type_ == MT_ short);} /** @brief Returns true if the current type equals the given type. */460 template <> inline bool MultiType::isType<unsigned short>() const { return (this->value_ && this->value_->type_ == MT_ ushort);} /** @brief Returns true if the current type equals the given type. */461 template <> inline bool MultiType::isType<int>() const { return (this->value_ && this->value_->type_ == MT_ int);} /** @brief Returns true if the current type equals the given type. */462 template <> inline bool MultiType::isType<unsigned int>() const { return (this->value_ && this->value_->type_ == MT_ uint);} /** @brief Returns true if the current type equals the given type. */463 template <> inline bool MultiType::isType<long>() const { return (this->value_ && this->value_->type_ == MT_ long);} /** @brief Returns true if the current type equals the given type. */464 template <> inline bool MultiType::isType<unsigned long>() const { return (this->value_ && this->value_->type_ == MT_ ulong);} /** @brief Returns true if the current type equals the given type. */465 template <> inline bool MultiType::isType<long long>() const { return (this->value_ && this->value_->type_ == MT_ longlong);} /** @brief Returns true if the current type equals the given type. */466 template <> inline bool MultiType::isType<unsigned long long>() const { return (this->value_ && this->value_->type_ == MT_ ulonglong);} /** @brief Returns true if the current type equals the given type. */467 template <> inline bool MultiType::isType<float>() const { return (this->value_ && this->value_->type_ == MT_ float);} /** @brief Returns true if the current type equals the given type. */468 template <> inline bool MultiType::isType<double>() const { return (this->value_ && this->value_->type_ == MT_ double);} /** @brief Returns true if the current type equals the given type. */469 template <> inline bool MultiType::isType<long double>() const { return (this->value_ && this->value_->type_ == MT_ longdouble);} /** @brief Returns true if the current type equals the given type. */470 template <> inline bool MultiType::isType<bool>() const { return (this->value_ && this->value_->type_ == MT_ bool);} /** @brief Returns true if the current type equals the given type. */471 template <> inline bool MultiType::isType<void*>() const { return (this->value_ && this->value_->type_ == MT_ void);} /** @brief Returns true if the current type equals the given type. */472 template <> inline bool MultiType::isType<std::string>() const { return (this->value_ && this->value_->type_ == MT_ string);} /** @brief Returns true if the current type equals the given type. */473 template <> inline bool MultiType::isType<orxonox::Vector2>() const { return (this->value_ && this->value_->type_ == MT_ vector2);} /** @brief Returns true if the current type equals the given type. */474 template <> inline bool MultiType::isType<orxonox::Vector3>() const { return (this->value_ && this->value_->type_ == MT_ vector3);} /** @brief Returns true if the current type equals the given type. */475 template <> inline bool MultiType::isType<orxonox::Vector4>() const { return (this->value_ && this->value_->type_ == MT_ vector4);} /** @brief Returns true if the current type equals the given type. */476 template <> inline bool MultiType::isType<orxonox::ColourValue>() const { return (this->value_ && this->value_->type_ == MT_ colourvalue);} /** @brief Returns true if the current type equals the given type. */477 template <> inline bool MultiType::isType<orxonox::Quaternion>() const { return (this->value_ && this->value_->type_ == MT_ quaternion);} /** @brief Returns true if the current type equals the given type. */478 template <> inline bool MultiType::isType<orxonox::Radian>() const { return (this->value_ && this->value_->type_ == MT_ radian);} /** @brief Returns true if the current type equals the given type. */479 template <> inline bool MultiType::isType<orxonox::Degree>() const { return (this->value_ && this->value_->type_ == MT_ degree);} /** @brief Returns true if the current type equals the given type. */460 template <> inline bool MultiType::isType<char>() const { return (this->value_ && this->value_->type_ == MT_Type::Char); } /** @brief Returns true if the current type equals the given type. */ 461 template <> inline bool MultiType::isType<unsigned char>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedChar); } /** @brief Returns true if the current type equals the given type. */ 462 template <> inline bool MultiType::isType<short>() const { return (this->value_ && this->value_->type_ == MT_Type::Short); } /** @brief Returns true if the current type equals the given type. */ 463 template <> inline bool MultiType::isType<unsigned short>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedShort); } /** @brief Returns true if the current type equals the given type. */ 464 template <> inline bool MultiType::isType<int>() const { return (this->value_ && this->value_->type_ == MT_Type::Int); } /** @brief Returns true if the current type equals the given type. */ 465 template <> inline bool MultiType::isType<unsigned int>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedInt); } /** @brief Returns true if the current type equals the given type. */ 466 template <> inline bool MultiType::isType<long>() const { return (this->value_ && this->value_->type_ == MT_Type::Long); } /** @brief Returns true if the current type equals the given type. */ 467 template <> inline bool MultiType::isType<unsigned long>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedLong); } /** @brief Returns true if the current type equals the given type. */ 468 template <> inline bool MultiType::isType<long long>() const { return (this->value_ && this->value_->type_ == MT_Type::LongLong); } /** @brief Returns true if the current type equals the given type. */ 469 template <> inline bool MultiType::isType<unsigned long long>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedLongLong); } /** @brief Returns true if the current type equals the given type. */ 470 template <> inline bool MultiType::isType<float>() const { return (this->value_ && this->value_->type_ == MT_Type::Float); } /** @brief Returns true if the current type equals the given type. */ 471 template <> inline bool MultiType::isType<double>() const { return (this->value_ && this->value_->type_ == MT_Type::Double); } /** @brief Returns true if the current type equals the given type. */ 472 template <> inline bool MultiType::isType<long double>() const { return (this->value_ && this->value_->type_ == MT_Type::LongDouble); } /** @brief Returns true if the current type equals the given type. */ 473 template <> inline bool MultiType::isType<bool>() const { return (this->value_ && this->value_->type_ == MT_Type::Bool); } /** @brief Returns true if the current type equals the given type. */ 474 template <> inline bool MultiType::isType<void*>() const { return (this->value_ && this->value_->type_ == MT_Type::VoidPointer); } /** @brief Returns true if the current type equals the given type. */ 475 template <> inline bool MultiType::isType<std::string>() const { return (this->value_ && this->value_->type_ == MT_Type::String); } /** @brief Returns true if the current type equals the given type. */ 476 template <> inline bool MultiType::isType<orxonox::Vector2>() const { return (this->value_ && this->value_->type_ == MT_Type::Vector2); } /** @brief Returns true if the current type equals the given type. */ 477 template <> inline bool MultiType::isType<orxonox::Vector3>() const { return (this->value_ && this->value_->type_ == MT_Type::Vector3); } /** @brief Returns true if the current type equals the given type. */ 478 template <> inline bool MultiType::isType<orxonox::Vector4>() const { return (this->value_ && this->value_->type_ == MT_Type::Vector4); } /** @brief Returns true if the current type equals the given type. */ 479 template <> inline bool MultiType::isType<orxonox::ColourValue>() const { return (this->value_ && this->value_->type_ == MT_Type::ColourValue); } /** @brief Returns true if the current type equals the given type. */ 480 template <> inline bool MultiType::isType<orxonox::Quaternion>() const { return (this->value_ && this->value_->type_ == MT_Type::Quaternion); } /** @brief Returns true if the current type equals the given type. */ 481 template <> inline bool MultiType::isType<orxonox::Radian>() const { return (this->value_ && this->value_->type_ == MT_Type::Radian); } /** @brief Returns true if the current type equals the given type. */ 482 template <> inline bool MultiType::isType<orxonox::Degree>() const { return (this->value_ && this->value_->type_ == MT_Type::Degree); } /** @brief Returns true if the current type equals the given type. */ 480 483 481 484 // Specialization to avoid ambiguities with the conversion operator -
code/trunk/src/util/MultiTypeValue.h
r3196 r3280 54 54 public: 55 55 /** @brief Constructor: Assigns the value and the type identifier. */ 56 MT_Value(const T& value, MT_Type type) : MT_ValueBase(type), value_(value) {}56 MT_Value(const T& value, MT_Type::Value type) : MT_ValueBase(type), value_(value) {} 57 57 58 58 /** @brief Creates a copy of itself. */ … … 139 139 inline operator bool() const { return getConvertedValue<T, bool> (this->value_, 0); } /** @brief Returns the current value, converted to the requested type. */ 140 140 inline operator void*() const { return getConvertedValue<T, void*> (this->value_, 0); } /** @brief Returns the current value, converted to the requested type. */ 141 inline operator std::string() const { return getConvertedValue<T, std::string> (this->value_, zeroise<std::string >()); } /** @brief Returns the current value, converted to the requested type. */142 inline operator orxonox::Vector2() const { return getConvertedValue<T, orxonox::Vector2> (this->value_, zeroise<orxonox::Vector2 >()); } /** @brief Returns the current value, converted to the requested type. */143 inline operator orxonox::Vector3() const { return getConvertedValue<T, orxonox::Vector3> (this->value_, zeroise<orxonox::Vector3 >()); } /** @brief Returns the current value, converted to the requested type. */144 inline operator orxonox::Vector4() const { return getConvertedValue<T, orxonox::Vector4> (this->value_, zeroise<orxonox::Vector4 >()); } /** @brief Returns the current value, converted to the requested type. */145 inline operator orxonox::ColourValue() const { return getConvertedValue<T, orxonox::ColourValue>(this->value_, zeroise<orxonox::ColourValue>()); } /** @brief Returns the current value, converted to the requested type. */146 inline operator orxonox::Quaternion() const { return getConvertedValue<T, orxonox::Quaternion> (this->value_, zeroise<orxonox::Quaternion >()); } /** @brief Returns the current value, converted to the requested type. */147 inline operator orxonox::Radian() const { return getConvertedValue<T, orxonox::Radian> (this->value_, zeroise<orxonox::Radian >()); } /** @brief Returns the current value, converted to the requested type. */148 inline operator orxonox::Degree() const { return getConvertedValue<T, orxonox::Degree> (this->value_, zeroise<orxonox::Degree >()); } /** @brief Returns the current value, converted to the requested type. */141 inline operator std::string() const { return getConvertedValue<T, std::string> (this->value_, NilValue<std::string >()); } /** @brief Returns the current value, converted to the requested type. */ 142 inline operator orxonox::Vector2() const { return getConvertedValue<T, orxonox::Vector2> (this->value_, NilValue<orxonox::Vector2 >()); } /** @brief Returns the current value, converted to the requested type. */ 143 inline operator orxonox::Vector3() const { return getConvertedValue<T, orxonox::Vector3> (this->value_, NilValue<orxonox::Vector3 >()); } /** @brief Returns the current value, converted to the requested type. */ 144 inline operator orxonox::Vector4() const { return getConvertedValue<T, orxonox::Vector4> (this->value_, NilValue<orxonox::Vector4 >()); } /** @brief Returns the current value, converted to the requested type. */ 145 inline operator orxonox::ColourValue() const { return getConvertedValue<T, orxonox::ColourValue>(this->value_, NilValue<orxonox::ColourValue>()); } /** @brief Returns the current value, converted to the requested type. */ 146 inline operator orxonox::Quaternion() const { return getConvertedValue<T, orxonox::Quaternion> (this->value_, NilValue<orxonox::Quaternion >()); } /** @brief Returns the current value, converted to the requested type. */ 147 inline operator orxonox::Radian() const { return getConvertedValue<T, orxonox::Radian> (this->value_, NilValue<orxonox::Radian >()); } /** @brief Returns the current value, converted to the requested type. */ 148 inline operator orxonox::Degree() const { return getConvertedValue<T, orxonox::Degree> (this->value_, NilValue<orxonox::Degree >()); } /** @brief Returns the current value, converted to the requested type. */ 149 149 150 150 /** @brief Puts the current value on the stream */ -
code/trunk/src/util/StringUtils.cc
r3251 r3280 44 44 std::string getUniqueNumberString() 45 45 { 46 return convertToString(getUniqueNumber());46 return multi_cast<std::string>(getUniqueNumber()); 47 47 } 48 48 -
code/trunk/src/util/UtilPrereqs.h
r3196 r3280 60 60 // Forward declarations 61 61 //----------------------------------------------------------------------- 62 63 namespace orxonox 64 { 65 class Exception; 66 class ExprParser; 67 class IntVector2; 68 class IntVector3; 69 class MultiType; 70 class OutputBuffer; 71 class OutputBufferListener; 72 class OutputHandler; 73 class SignalHandler; 74 class SubString; 75 } 76 62 77 namespace Ogre 63 78 { … … 72 87 class ColourValue; 73 88 } 74 75 89 namespace orxonox 76 90 { … … 84 98 using Ogre::Quaternion; 85 99 using Ogre::ColourValue; 100 } 86 101 87 class Exception; 88 class ExprParser; 89 class IntVector2; 90 class IntVector3; 91 class MultiType; 92 class OutputBuffer; 93 class OutputBufferListener; 94 class OutputHandler; 95 class SignalHandler; 96 class SubString; 102 namespace Loki 103 { 104 class ScopeGuardImplBase; 105 typedef const ScopeGuardImplBase& ScopeGuard; 97 106 } 98 107
Note: See TracChangeset
for help on using the changeset viewer.