Changeset 1531
- Timestamp:
- Jun 4, 2008, 8:06:38 PM (16 years ago)
- Location:
- code/branches/input
- Files:
-
- 2 added
- 2 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/input/src/core/Core.h
r1524 r1531 35 35 */ 36 36 37 #ifndef _Core Settings_H__38 #define _Core Settings_H__37 #ifndef _Core_H__ 38 #define _Core_H__ 39 39 40 40 #include "CorePrereqs.h" … … 75 75 } 76 76 77 #endif /* _Core Settings_H__ */77 #endif /* _Core_H__ */ -
code/branches/input/src/core/input/InputBuffer.cc
r1519 r1531 39 39 InputBuffer::InputBuffer() 40 40 { 41 Register Object(InputBuffer);41 RegisterRootObject(InputBuffer); 42 42 43 43 this->buffer_ = ""; … … 59 59 InputBuffer::InputBuffer(const std::string allowedChars) 60 60 { 61 Register Object(InputBuffer);61 RegisterRootObject(InputBuffer); 62 62 63 63 this->allowedChars_ = allowedChars; -
code/branches/input/src/core/input/InputManager.cc
r1524 r1531 69 69 keyboardModifiers_(0) 70 70 { 71 Register Object(InputManager);71 RegisterRootObject(InputManager); 72 72 } 73 73 -
code/branches/input/src/core/input/KeyBinder.cc
r1520 r1531 53 53 mousePosition_[1] = 0; 54 54 55 Register Object(KeyBinder);55 RegisterRootObject(KeyBinder); 56 56 57 57 // keys -
code/branches/input/src/orxonox/CMakeLists.txt
r1524 r1531 3 3 Main.cc 4 4 Orxonox.cc 5 Settings.cc 5 6 6 7 console/InGameConsole.cc -
code/branches/input/src/orxonox/GraphicsEngine.cc
r1519 r1531 21 21 * 22 22 * Author: 23 * Benjamin Knecht <beni_at_orxonox.net>, (C) 200723 * Reto Grieder 24 24 * Co-authors: 25 * Reto Grieder25 * Benjamin Knecht <beni_at_orxonox.net>, (C) 2007, Felix Schulthess 26 26 * 27 27 */ … … 35 35 #include "GraphicsEngine.h" 36 36 37 #include <OgreConfigFile.h> 38 #include <OgreException.h> 39 #include <OgreLogManager.h> 37 40 #include <OgreRoot.h> 38 #include <OgreException.h> 39 #include <OgreConfigFile.h> 40 #include <OgreLogManager.h> 41 #include <OgreSceneManager.h> 41 42 #include <OgreTextureManager.h> 42 #include "core/input/InputManager.h" 43 #include <OgreViewport.h> 44 43 45 #include "core/CoreIncludes.h" 44 46 #include "core/ConfigValueIncludes.h" 45 47 #include "core/Debug.h" 46 48 #include "core/CommandExecutor.h" 47 #include "core/TclBind.h" 49 #include "core/ConsoleCommand.h" 50 #include "core/input/InputManager.h" 51 48 52 #include "console/InGameConsole.h" 49 50 #include "core/ConsoleCommand.h" 51 #include <OgreSceneManager.h> 52 #include <OgreCompositorManager.h> 53 #include <OgreViewport.h> 53 #include "Settings.h" 54 54 55 55 56 namespace orxonox { … … 70 71 root_(0), 71 72 scene_(0), 72 renderWindow_(0), 73 //configPath_(""), 74 dataPath_(""), 75 ogreLogfile_("") 73 renderWindow_(0) 76 74 { 77 75 RegisterObject(GraphicsEngine); … … 83 81 void GraphicsEngine::setConfigValues() 84 82 { 85 SetConfigValue(dataPath_, "../../Media/").description("relative path to media data"); 86 SetConfigValue(ogreLogfile_, "ogre.log").description("Logfile for messages from Ogre. Use \"\" to suppress log file creation."); 83 SetConfigValue(resourceFile_, "resources.cfg").description("Location of the resources file in the data path."); 84 SetConfigValue(ogreConfigFile_, "ogre.cfg").description("Location of the Ogre config file"); 85 SetConfigValue(ogrePluginsFile_, "plugins.cfg").description("Location of the Ogre plugins file"); 86 SetConfigValue(ogreLogFile_, "ogre.log").description("Logfile for messages from Ogre. \ 87 Use \"\" to suppress log file creation."); 87 88 SetConfigValue(ogreLogLevelTrivial_ , 5).description("Corresponding orxonox debug level for ogre Trivial"); 88 89 SetConfigValue(ogreLogLevelNormal_ , 4).description("Corresponding orxonox debug level for ogre Normal"); 89 90 SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical"); 90 91 TclBind::getInstance().setDataPath(this->dataPath_);92 91 } 93 92 … … 126 125 @brief Creates the Ogre Root object and sets up the ogre log. 127 126 */ 128 bool GraphicsEngine::setup( std::string& dataPath)127 bool GraphicsEngine::setup() 129 128 { 130 129 CCOUT(3) << "Setting up..." << std::endl; 131 130 // temporary overwrite of dataPath, change ini file for permanent change 132 if (dataPath != "")133 dataPath_ = dataPath;134 if (dataPath_ == "")135 return false;136 if (dataPath_[dataPath_.size() - 1] != '/')137 dataPath_ += "/";138 139 //TODO: Check if file exists (maybe not here)140 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC && defined(_DEBUG)141 std::string plugin_filename = "plugins_d.cfg";142 #else143 std::string plugin_filename = "plugins.cfg";144 #endif145 131 146 132 // TODO: LogManager doesn't work on specific systems. The why is unknown yet. … … 154 140 // create our own log that we can listen to 155 141 Ogre::Log *myLog; 156 if (this->ogreLog file_ == "")142 if (this->ogreLogFile_ == "") 157 143 myLog = logger->createLog("ogre.log", true, false, true); 158 144 else 159 myLog = logger->createLog(this->ogreLog file_, true, false, false);145 myLog = logger->createLog(this->ogreLogFile_, true, false, false); 160 146 CCOUT(4) << "Ogre Log created" << std::endl; 161 147 … … 167 153 CCOUT(4) << "Creating Ogre Root..." << std::endl; 168 154 169 root_ = new Ogre::Root(plugin_filename, "ogre.cfg", this->ogreLogfile_); 155 if (ogrePluginsFile_ == "") 156 { 157 COUT(1) << "Error: Ogre plugins file set to \"\". Cannot load." << std::endl; 158 return false; 159 } 160 if (ogreConfigFile_ == "") 161 { 162 COUT(1) << "Error: Ogre config file set to \"\". Cannot load." << std::endl; 163 return false; 164 } 165 if (ogreLogFile_ == "") 166 { 167 COUT(1) << "Error: Ogre log file set to \"\". Cannot load." << std::endl; 168 return false; 169 } 170 171 try 172 { 173 root_ = new Ogre::Root(ogrePluginsFile_, ogreConfigFile_, ogreLogFile_); 174 } 175 catch (Ogre::Exception ex) 176 { 177 COUT(2) << "Error: There was an exception when creating Ogre Root." << std::endl; 178 return false; 179 } 180 181 if (!root_->getInstalledPlugins().size()) 182 { 183 COUT(1) << "Error: No plugins declared. Cannot load Ogre." << std::endl; 184 COUT(0) << "Is the plugins file correctly declared?" << std::endl; 185 return false; 186 } 170 187 171 188 #if 0 … … 180 197 181 198 // specify where Ogre has to look for resources. This call doesn't parse anything yet! 182 declareRessourceLocations(); 199 if (!declareRessourceLocations()) 200 return false; 183 201 184 202 CCOUT(3) << "Set up done." << std::endl; … … 186 204 } 187 205 188 voidGraphicsEngine::declareRessourceLocations()206 bool GraphicsEngine::declareRessourceLocations() 189 207 { 190 208 CCOUT(4) << "Declaring Resources" << std::endl; 191 209 //TODO: Specify layout of data file and maybe use xml-loader 192 210 //TODO: Work with ressource groups (should be generated by a special loader) 211 212 if (resourceFile_ == "") 213 { 214 COUT(1) << "Error: Resource file set to \"\". Cannot load." << std::endl; 215 return false; 216 } 217 193 218 // Load resource paths from data file using configfile ressource type 194 219 Ogre::ConfigFile cf; 195 cf.load(dataPath_ + "resources.cfg"); 220 try 221 { 222 cf.load(Settings::getDataPath() + resourceFile_); 223 } 224 catch (Ogre::Exception ex) 225 { 226 COUT(1) << "Error: Could not load resources.cfg in path " << Settings::getDataPath() << std::endl; 227 COUT(0) << "Have you forgotten to set the data path in orxnox.ini?" << std::endl; 228 return false; 229 } 196 230 197 231 // Go through all sections & settings in the file … … 201 235 while (seci.hasMoreElements()) 202 236 { 203 secName = seci.peekNextKey(); 204 Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext(); 205 Ogre::ConfigFile::SettingsMultiMap::iterator i; 206 for (i = settings->begin(); i != settings->end(); ++i) 237 try 207 238 { 208 typeName = i->first; // for instance "FileSystem" or "Zip" 209 archName = i->second; // name (and location) of archive 210 211 Ogre::ResourceGroupManager::getSingleton().addResourceLocation( 212 std::string(dataPath_ + archName), 213 typeName, secName); 239 secName = seci.peekNextKey(); 240 Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext(); 241 Ogre::ConfigFile::SettingsMultiMap::iterator i; 242 for (i = settings->begin(); i != settings->end(); ++i) 243 { 244 typeName = i->first; // for instance "FileSystem" or "Zip" 245 archName = i->second; // name (and location) of archive 246 247 Ogre::ResourceGroupManager::getSingleton().addResourceLocation( 248 std::string(Settings::getDataPath() + archName), typeName, secName); 249 } 214 250 } 215 } 251 catch (Ogre::Exception ex) 252 { 253 COUT(2) << "Exception while reading resources.cfg. Proceeding.." << ex.getDescription() << std::endl; 254 } 255 } 256 return true; 216 257 } 217 258 … … 223 264 224 265 CCOUT(4) << "Creating render window" << std::endl; 225 this->renderWindow_ = root_->initialise(true, "OrxonoxV2"); 266 try 267 { 268 this->renderWindow_ = root_->initialise(true, "OrxonoxV2"); 269 } 270 catch (Ogre::Exception ex) 271 { 272 COUT(2) << "Error: There was an exception when initialising Ogre Root." << std::endl; 273 return false; 274 } 275 226 276 if (!root_->isInitialised()) 227 277 { 228 CCOUT(2) << "Error: Creating Ogre root object failed" << std::endl;278 CCOUT(2) << "Error: Initialising Ogre root object failed." << std::endl; 229 279 return false; 230 280 } -
code/branches/input/src/orxonox/GraphicsEngine.h
r1505 r1531 21 21 * 22 22 * Author: 23 * Benjamin Knecht <beni_at_orxonox.net>, (C) 200723 * Reto Grieder 24 24 * Co-authors: 25 * Reto Grieder25 * Benjamin Knecht <beni_at_orxonox.net>, (C) 2007, Felix Schulthess 26 26 * 27 27 */ … … 56 56 public: 57 57 void setConfigValues(); 58 bool setup( std::string& dataPath);59 voiddeclareRessourceLocations();58 bool setup(); 59 bool declareRessourceLocations(); 60 60 bool loadRenderer(); 61 61 bool initialiseResources(); … … 65 65 66 66 Ogre::SceneManager* getSceneManager() { return scene_; } 67 std::string& getDataPath() { return dataPath_; }68 67 69 68 // several window properties … … 101 100 bool, const std::string&); 102 101 103 Ogre::Root* root_; //!< Ogre's root104 Ogre::SceneManager* scene_; //!< scene manager of the game105 Ogre::RenderWindow* renderWindow_; //!< the current render window106 //bool bOverwritePath_; //!< overwrites path107 //std::string configPath_; //!< path to config file108 std::string dataPath_; //!< path to data file109 std::string ogreLog file_;//!< log file name for Ogre log messages110 int ogreLogLevelTrivial_; //!< Corresponding Orxonx debug level for LL_TRIVIAL111 int ogreLogLevelNormal_; //!< Corresponding Orxonx debug level for LL_NORMAL112 int ogreLogLevelCritical_; //!< Corresponding Orxonx debug level for LL_CRITICAL102 Ogre::Root* root_; //!< Ogre's root 103 Ogre::SceneManager* scene_; //!< scene manager of the game 104 Ogre::RenderWindow* renderWindow_; //!< the current render window 105 std::string resourceFile_; //!< resources file name 106 std::string ogreConfigFile_; //!< ogre config file name 107 std::string ogrePluginsFile_; //!< ogre plugins file name 108 std::string ogreLogFile_; //!< log file name for Ogre log messages 109 int ogreLogLevelTrivial_; //!< Corresponding Orxonx debug level for LL_TRIVIAL 110 int ogreLogLevelNormal_; //!< Corresponding Orxonx debug level for LL_NORMAL 111 int ogreLogLevelCritical_; //!< Corresponding Orxonx debug level for LL_CRITICAL 113 112 }; 114 113 } -
code/branches/input/src/orxonox/Main.cc
r1505 r1531 82 82 res = orx->init(argc, argv, macBundlePath()); 83 83 #else 84 res = orx->init(argc, argv , "");84 res = orx->init(argc, argv); 85 85 #endif 86 86 -
code/branches/input/src/orxonox/Orxonox.cc
r1524 r1531 21 21 * 22 22 * Author: 23 * Reto Grieder 24 * Co-authors: 23 25 * Benjamin Knecht <beni_at_orxonox.net>, (C) 2007 24 * Co-authors:25 * ...26 26 * 27 27 */ … … 73 73 74 74 #include "GraphicsEngine.h" 75 #include "Settings.h" 75 76 76 77 // FIXME: is this really file scope? … … 166 167 * @param path path to config (in home dir or something) 167 168 */ 168 bool Orxonox::init(int argc, char **argv, std::string path) 169 { 170 //TODO: find config file (assuming executable directory) 171 //TODO: read config file 172 //TODO: give config file to Ogre 169 bool Orxonox::init(int argc, char **argv) 170 { 171 #ifdef _DEBUG 172 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox_d.ini"); 173 #else 174 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 175 #endif 176 Factory::createClassHierarchy(); 177 173 178 std::string mode; 174 std::string dataPath;179 std::string tempDataPath; 175 180 176 181 ArgReader ar(argc, argv); 177 ar.checkArgument("mode", mode, false);178 ar.checkArgument("data", dataPath, false);179 ar.checkArgument("ip", serverIp_, false);180 ar.checkArgument("port", serverPort_, false);182 ar.checkArgument("mode", &mode, false); 183 ar.checkArgument("data", &tempDataPath, false); 184 ar.checkArgument("ip", &serverIp_, false); 185 ar.checkArgument("port", &serverPort_, false); 181 186 if(ar.errorHandling()) 187 { 188 COUT(1) << "Error while parsing command line arguments" << std::endl; 189 COUT(1) << ar.getErrorString(); 190 COUT(0) << "Usage:" << std::endl << "orxonox [mode client|server|dedicated|standalone] " 191 << "[--data PATH] [--ip IP] [--port PORT]" << std::endl; 182 192 return false; 193 } 183 194 184 195 if (mode == "client") … … 190 201 else 191 202 { 192 mode = "standalone"; 203 if (mode == "") 204 mode = "standalone"; 205 if (mode != "standalone") 206 { 207 COUT(2) << "Warning: mode \"" << mode << "\" doesn't exist. " 208 << "Defaulting to standalone" << std::endl; 209 mode = "standalone"; 210 } 193 211 mode_ = STANDALONE; 194 212 } 195 213 COUT(3) << "Orxonox: Mode is " << mode << "." << std::endl; 214 215 if (tempDataPath != "") 216 { 217 if (tempDataPath[tempDataPath.size() - 1] != '/') 218 tempDataPath += "/"; 219 Settings::tsetDataPath(tempDataPath); 220 } 221 222 // initialise TCL 223 TclBind::getInstance().setDataPath(Settings::getDataPath()); 196 224 197 225 //if (mode_ == DEDICATED) … … 202 230 // procedure until the GUI is identical 203 231 204 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini");205 Factory::createClassHierarchy();206 207 232 ogre_ = &GraphicsEngine::getSingleton(); 208 if (!ogre_->setup( path)) // creates ogre root and other essentials233 if (!ogre_->setup()) // creates ogre root and other essentials 209 234 return false; 210 235 -
code/branches/input/src/orxonox/Orxonox.h
r1505 r1531 21 21 * 22 22 * Author: 23 * ...23 * Reto Grieder 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht <beni_at_orxonox.net>, (C) 2007 26 26 * 27 27 */ … … 58 58 { 59 59 public: 60 bool init(int argc, char **argv , std::string path);60 bool init(int argc, char **argv); 61 61 bool start(); 62 62 -
code/branches/input/src/util/ArgReader.cc
r1505 r1531 21 21 * 22 22 * Author: 23 * Benjamin Knecht <beni_at_orxonox.net>, (C) 200723 * Reto Grieder 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht <beni_at_orxonox.net> 26 26 * 27 27 */ … … 33 33 34 34 #include "ArgReader.h" 35 #include "SubString.h" 35 36 36 #include <iostream> 37 ArgReader::ArgReader(int argc, char **argv) 38 { 39 failure_ = false; 40 errorString_ = ""; 41 CmdLineArg arg; 37 42 38 ArgReader::ArgReader(int argc, char** argv) 39 { 40 counter_ = argc; 41 arguments_ = argv; 42 fail_ = false; 43 errorStr_ = ""; 44 } 43 int i = 1; 44 while (i < argc) 45 { 46 if (argv[i][0] == '-' && argv[i][1] == '-') // name 47 { 48 if (argv[i][2] == '\0') 49 { 50 failure_ = true; 51 errorString_ += "Expected word after \"--\".\n"; 52 } 53 arg.bChecked_ = false; 54 arg.name_ = argv[i] + 2; 55 arg.value_ = ""; 56 arguments_.push_back(arg); 57 } 58 else // value 59 { 60 if (arguments_.size() == 0) 61 { 62 failure_ = true; 63 errorString_ += "Expected \"--\" in command line arguments.\n"; 64 arg.bChecked_ = false; 65 arg.name_ = ""; 66 arg.value_ = ""; 67 arguments_.push_back(arg); 68 } 45 69 46 void ArgReader::checkArgument(std::string option, std::string &string, bool must)47 { 48 int argpos = checkOption(option) + 1;49 if(argpos != 0)50 {51 string = arguments_[argpos];70 if (arguments_.back().value_ != "") 71 arguments_.back().value_ += " " + std::string(argv[i]); 72 else 73 arguments_.back().value_ = argv[i]; 74 } 75 ++i; 52 76 } 53 else54 {55 if(must) {56 errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";57 fail_ = true;58 }59 }60 61 }62 63 void ArgReader::checkArgument(std::string option, int &integer, bool must)64 {65 int argpos = checkOption(option) + 1;66 if(argpos != 0)67 {68 integer = atoi(arguments_[argpos]);69 }70 else71 {72 if(must) {73 errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";74 fail_ = true;75 }76 }77 }78 79 void ArgReader::checkArgument(std::string option, float &floating, bool must)80 {81 int argpos = checkOption(option) + 1;82 if(argpos != 0)83 {84 floating = (float)atof(arguments_[argpos]);85 }86 else87 {88 if(must) {89 errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";90 fail_ = true;91 }92 }93 }94 95 int ArgReader::checkOption(std::string option)96 {97 for(int i = 1; i < counter_; i++)98 {99 if(arguments_[i] == "--" + option)100 return i;101 }102 return -1;103 77 } 104 78 105 79 bool ArgReader::errorHandling() 106 80 { 107 if(fail_) 108 std::cout << errorStr_; 109 return fail_; 81 bool argumentsChecked = true; 82 for (unsigned int i = 1; i < arguments_.size(); ++i) 83 argumentsChecked &= arguments_[i].bChecked_; 84 85 if (!argumentsChecked) 86 errorString_ += "Not all arguments could be matched.\n"; 87 88 return !argumentsChecked || failure_; 110 89 } 90 91 const std::string& ArgReader::getErrorString() 92 { 93 return errorString_; 94 } -
code/branches/input/src/util/ArgReader.h
r1505 r1531 21 21 * 22 22 * Author: 23 * Reto Grieder 24 * Co-authors: 23 25 * Benjamin Knecht <beni_at_orxonox.net> 24 * Co-authors:25 * ...26 26 * 27 27 */ … … 39 39 40 40 #include <string> 41 #include <vector> 42 #include "Convert.h" 43 44 struct _UtilExport CmdLineArg 45 { 46 std::string name_; 47 std::string value_; 48 bool bChecked_; 49 }; 41 50 42 51 class _UtilExport ArgReader … … 44 53 public: 45 54 ArgReader(int argc, char **argv); 46 void checkArgument(std::string option, std::string& string, bool must=false); 47 void checkArgument(std::string option, int& integer, bool must=false); 48 void checkArgument(std::string option, float& floating, bool must=false); 55 template <class T> 56 void checkArgument(std::string option, T* value, bool must = false); 49 57 bool errorHandling(); 50 private: 51 int checkOption(std::string option); 58 const std::string& getErrorString(); 52 59 53 60 private: 54 int counter_; 55 char **arguments_; 56 bool fail_; 57 std::string errorStr_; 61 std::vector<CmdLineArg> arguments_; 62 bool failure_; 63 std::string errorString_; 58 64 }; 59 65 66 template <class T> 67 void ArgReader::checkArgument(std::string option, T* value, bool must) 68 { 69 unsigned int iArg = 0; 70 while (iArg < arguments_.size()) 71 { 72 if (arguments_[iArg].name_ == option) 73 break; 74 ++iArg; 75 } 76 if (iArg == arguments_.size()) 77 { 78 if (must) 79 { 80 failure_ = true; 81 errorString_ += "Cannot find mandatory argument \"" + option + "\"\n"; 82 return; 83 } 84 else 85 return; 86 } 87 88 arguments_[iArg].bChecked_ = true; 89 90 if (!convertValue(value, arguments_[iArg].value_)) 91 { 92 failure_ = true; 93 errorString_ += "Cannot convert argument value for option \"" + option + "\"\n"; 94 } 95 } 96 97 template <> 98 void ArgReader::checkArgument(std::string option, bool* value, bool must) 99 { 100 // for type bool, only check whether the option was set or not 101 unsigned int iArg = 0; 102 while (iArg < arguments_.size()) 103 { 104 if (arguments_[iArg].name_ == option) 105 { 106 arguments_[iArg].bChecked_ = true; 107 *value = true; 108 break; 109 } 110 ++iArg; 111 } 112 if (iArg == arguments_.size()) 113 *value = false; 114 } 115 60 116 #endif /* _ArgReader_H__ */ -
code/branches/input/visual_studio/vc8/orxonox.vcproj
r1524 r1531 184 184 </FileConfiguration> 185 185 </File> 186 <File 187 RelativePath="..\..\src\orxonox\Settings.cc" 188 > 189 </File> 186 190 <Filter 187 191 Name="hud" … … 468 472 <File 469 473 RelativePath="..\..\src\orxonox\OrxonoxStableHeaders.h" 474 > 475 </File> 476 <File 477 RelativePath="..\..\src\orxonox\Settings.h" 470 478 > 471 479 </File>
Note: See TracChangeset
for help on using the changeset viewer.