Changeset 1293 for code/trunk/src/orxonox
- Timestamp:
- May 15, 2008, 5:44:55 PM (17 years ago)
- Location:
- code/trunk/src/orxonox
- Files:
-
- 25 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/orxonox/CMakeLists.txt
r1224 r1293 16 16 objects/Ambient.cc 17 17 objects/Camera.cc 18 objects/CameraHandler.cc 18 19 objects/Explosion.cc 19 20 objects/Model.cc … … 42 43 ADD_EXECUTABLE( orxonox ${ORXONOX_SRC_FILES} ) 43 44 45 IF(NETWORKTRAFFIC_TESTING_ENABLED) 46 47 SET( ORXONOXS_SRC_FILES 48 GraphicsEngine.cc 49 objects/Ambient.cc 50 objects/Camera.cc 51 objects/CameraHandler.cc 52 objects/Explosion.cc 53 objects/Model.cc 54 objects/NPC.cc 55 objects/Projectile.cc 56 objects/Skybox.cc 57 objects/SpaceShip.cc 58 objects/WorldEntity.cc 59 ) 60 61 ADD_LIBRARY(orxonoxs SHARED ${ORXONOX_SRC_FILES}) 62 ENDIF(NETWORKTRAFFIC_TESTING_ENABLED) 63 44 64 TARGET_LINK_LIBRARIES( orxonox 45 65 ${OGRE_LIBRARIES} -
code/trunk/src/orxonox/GraphicsEngine.cc
r1220 r1293 9 9 * modify it under the terms of the GNU General Public License 10 10 * as published by the Free Software Foundation; either version 2 11 * of the License, or (at your option) any later version.12 * 11 * of the License, or (atl your option) any later version. 12 *lo 13 13 * This program is distributed in the hope that it will be useful, 14 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of … … 44 44 #include "core/ConfigValueIncludes.h" 45 45 #include "core/Debug.h" 46 #include "core/ TclBind.h"46 #include "core/CommandExecutor.h" 47 47 48 48 … … 53 53 @return The only instance of GraphicsEngine. 54 54 */ 55 GraphicsEngine& GraphicsEngine::getSingleton()55 /*static*/ GraphicsEngine& GraphicsEngine::getSingleton() 56 56 { 57 57 static GraphicsEngine theOnlyInstance; … … 62 62 @brief Only use constructor to initialise variables and pointers! 63 63 */ 64 GraphicsEngine::GraphicsEngine() 64 GraphicsEngine::GraphicsEngine() : 65 root_(0), 66 scene_(0), 67 renderWindow_(0), 68 //configPath_(""), 69 dataPath_(""), 70 ogreLogfile_("") 65 71 { 66 72 RegisterObject(GraphicsEngine); 67 //this->bOverwritePath_ = false; 73 68 74 this->setConfigValues(); 69 // set to standard values 70 this->configPath_ = ""; 71 this->root_ = 0; 72 this->scene_ = 0; 73 this->renderWindow_ = 0; 74 COUT(4) << "*** GraphicsEngine: Constructed" << std::endl; 75 CCOUT(4) << "Constructed" << std::endl; 76 } 77 78 void GraphicsEngine::setConfigValues() 79 { 80 SetConfigValue(dataPath_, "../../Media/").description("relative path to media data"); 81 SetConfigValue(ogreLogfile_, "ogre.log").description("Logfile for messages from Ogre. Use \"\" to suppress log file creation."); 82 SetConfigValue(ogreLogLevelTrivial_ , 5).description("Corresponding orxonox debug level for ogre Trivial"); 83 SetConfigValue(ogreLogLevelNormal_ , 4).description("Corresponding orxonox debug level for ogre Normal"); 84 SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical"); 75 85 } 76 86 … … 89 99 void GraphicsEngine::destroy() 90 100 { 91 C OUT(4) << "*** GraphicsEngine:Destroying objects..." << std::endl;101 CCOUT(4) << "Destroying objects..." << std::endl; 92 102 Ogre::WindowEventUtilities::removeWindowEventListener(this->renderWindow_, this); 93 103 if (this->root_) … … 103 113 delete Ogre::LogManager::getSingletonPtr(); 104 114 } 105 COUT(4) << "*** GraphicsEngine: Destroying objects done" << std::endl; 106 } 107 108 void GraphicsEngine::setConfigValues() 109 { 110 SetConfigValue(dataPath_, "../../Media/").description("relative path to media data"); 111 SetConfigValue(ogreLogfile_, "ogre.log").description("Logfile for messages from Ogre. Use \"\" to suppress log file creation."); 112 SetConfigValue(ogreLogLevelTrivial_ , 5).description("Corresponding orxonox debug level for ogre Trivial"); 113 SetConfigValue(ogreLogLevelNormal_ , 4).description("Corresponding orxonox debug level for ogre Normal"); 114 SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical"); 115 116 TclBind::getInstance().setDataPath(this->dataPath_); 115 CCOUT(4) << "Destroying objects done" << std::endl; 117 116 } 118 117 … … 120 119 @brief Creates the Ogre Root object and sets up the ogre log. 121 120 */ 122 void GraphicsEngine::setup() 123 { 121 bool GraphicsEngine::setup(std::string& dataPath) 122 { 123 CCOUT(3) << "Setting up..." << std::endl; 124 // temporary overwrite of dataPath, change ini file for permanent change 125 if (dataPath != "") 126 dataPath_ = dataPath; 127 if (dataPath_ == "") 128 return false; 129 if (dataPath_[dataPath_.size() - 1] != '/') 130 dataPath_ += "/"; 131 124 132 //TODO: Check if file exists (maybe not here) 125 /*#ifndef OGRE_STATIC_LIB126 root_ = new Ogre::Root(configPath_ + "plugins.cfg", configPath_ + "ogre.cfg",127 configPath_ + "Ogre.log");128 #else129 root_ = new Ogre::Root(NULL, configPath_ + "ogre.cfg", configPath_ + "Ogre.log");130 #endif*/131 133 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC && defined(_DEBUG) 132 134 std::string plugin_filename = "plugins_d.cfg"; … … 135 137 #endif 136 138 137 // create a logManager 138 Ogre::LogManager *logger; 139 if (Ogre::LogManager::getSingletonPtr() == 0) 140 logger = new Ogre::LogManager(); 141 else 142 logger = Ogre::LogManager::getSingletonPtr(); 143 COUT(4) << "*** GraphicsEngine: Ogre LogManager created/assigned" << std::endl; 139 /* // create a logManager 140 // note: If there's already a logManager, Ogre will complain by a failed assertation. 141 // but that shouldn't happen, since this is the first time to create a logManager.. 142 Ogre::LogManager* logger = new Ogre::LogManager(); 143 CCOUT(4) << "Ogre LogManager created" << std::endl; 144 144 145 145 // create our own log that we can listen to … … 148 148 myLog = logger->createLog("ogre.log", true, false, true); 149 149 else 150 myLog = logger->createLog(this->ogreLogfile_, true, false, false);151 C OUT(4) << "*** GraphicsEngine:Ogre Log created" << std::endl;150 myLog = logger->createLog(this->ogreLogfile_, true, false, false); 151 CCOUT(4) << "Ogre Log created" << std::endl; 152 152 153 153 myLog->setLogDetail(Ogre::LL_BOREME); 154 myLog->addListener(this); 154 myLog->addListener(this);*/ 155 155 156 156 // Root will detect that we've already created a Log 157 C OUT(4) << "*** GraphicsEngine:Creating Ogre Root..." << std::endl;157 CCOUT(4) << "Creating Ogre Root..." << std::endl; 158 158 root_ = new Ogre::Root(plugin_filename); 159 COUT(4) << "*** GraphicsEngine: Creating Ogre Root done" << std::endl; 160 } 161 162 /** 163 * @return scene manager 164 */ 165 Ogre::SceneManager* GraphicsEngine::getSceneManager() 166 { 167 if(!scene_) 168 { 169 scene_ = root_->createSceneManager(Ogre::ST_GENERIC, "Default SceneManager"); 170 COUT(3) << "Info: Created SceneMan: " << scene_ << std::endl; 171 } 172 return scene_; 173 } 174 175 bool GraphicsEngine::load(std::string dataPath) 176 { 177 // temporary overwrite of dataPath, change ini file for permanent change 178 if( dataPath != "" ) 179 dataPath_ = dataPath + "/"; 180 loadRessourceLocations(this->dataPath_); 181 if (!root_->restoreConfig() && !root_->showConfigDialog()) 182 return false; 159 CCOUT(4) << "Creating Ogre Root done" << std::endl; 160 161 // specify where Ogre has to look for resources. This call doesn't parse anything yet! 162 declareRessourceLocations(); 163 164 CCOUT(3) << "Set up done." << std::endl; 183 165 return true; 184 166 } 185 167 186 void GraphicsEngine::initialise() 187 { 188 this->renderWindow_ = root_->initialise(true, "OrxonoxV2"); 189 Ogre::WindowEventUtilities::addWindowEventListener(this->renderWindow_, this); 190 Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); 191 //TODO: Do NOT load all the groups, why are we doing that? And do we really do that? initialise != load... 192 Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); 193 } 194 195 void GraphicsEngine::loadRessourceLocations(std::string dataPath) 196 { 168 void GraphicsEngine::declareRessourceLocations() 169 { 170 CCOUT(4) << "Declaring Resources" << std::endl; 197 171 //TODO: Specify layout of data file and maybe use xml-loader 198 172 //TODO: Work with ressource groups (should be generated by a special loader) 199 173 // Load resource paths from data file using configfile ressource type 200 174 Ogre::ConfigFile cf; 201 cf.load(dataPath + "resources.cfg");175 cf.load(dataPath_ + "resources.cfg"); 202 176 203 177 // Go through all sections & settings in the file … … 216 190 217 191 Ogre::ResourceGroupManager::getSingleton().addResourceLocation( 218 std::string(dataPath + archName),192 std::string(dataPath_ + archName), 219 193 typeName, secName); 220 194 } 221 195 } 196 } 197 198 bool GraphicsEngine::loadRenderer() 199 { 200 CCOUT(4) << "Configuring Renderer" << std::endl; 201 if (!root_->restoreConfig() && !root_->showConfigDialog()) 202 return false; 203 204 CCOUT(4) << "Creating render window" << std::endl; 205 this->renderWindow_ = root_->initialise(true, "OrxonoxV2"); 206 if (!root_->isInitialised()) 207 { 208 CCOUT(2) << "Error: Creating Ogre root object failed" << std::endl; 209 return false; 210 } 211 Ogre::WindowEventUtilities::addWindowEventListener(this->renderWindow_, this); 212 Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); 213 return true; 214 } 215 216 bool GraphicsEngine::initialiseResources() 217 { 218 CCOUT(4) << "Initialising resources" << std::endl; 219 //TODO: Do NOT load all the groups, why are we doing that? And do we really do that? initialise != load... 220 try 221 { 222 Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); 223 /*Ogre::StringVector str = Ogre::ResourceGroupManager::getSingleton().getResourceGroups(); 224 for (unsigned int i = 0; i < str.size(); i++) 225 { 226 Ogre::ResourceGroupManager::getSingleton().loadResourceGroup(str[i]); 227 }*/ 228 } 229 catch (Ogre::Exception e) 230 { 231 CCOUT(2) << "Error: There was an Error when initialising the resources." << std::endl; 232 CCOUT(2) << "ErrorMessage: " << e.getFullDescription() << std::endl; 233 return false; 234 } 235 return true; 236 } 237 238 /** 239 * @brief Creates the SceneManager 240 */ 241 bool GraphicsEngine::createNewScene() 242 { 243 CCOUT(4) << "Creating new SceneManager" << std::endl; 244 if (scene_) 245 { 246 CCOUT(2) << "SceneManager already exists! Skipping." << std::endl; 247 return false; 248 } 249 scene_ = root_->createSceneManager(Ogre::ST_GENERIC, "Default SceneManager"); 250 CCOUT(3) << "Created SceneManager: " << scene_ << std::endl; 251 return true; 222 252 } 223 253 … … 291 321 } 292 322 OutputHandler::getOutStream().setOutputLevel(orxonoxLevel) 293 << "*** Ogre: " << message << std::endl; 294 } 295 296 void GraphicsEngine::windowMoved(Ogre::RenderWindow *rw){ 297 int w = rw->getWidth(); 298 int h = rw->getHeight(); 299 InputManager::setWindowExtents(w, h); 300 } 301 302 void GraphicsEngine::windowResized(Ogre::RenderWindow *rw){ 303 int w = rw->getWidth(); 304 int h = rw->getHeight(); 305 InputManager::setWindowExtents(w, h); 306 } 307 308 void GraphicsEngine::windowFocusChanged(Ogre::RenderWindow *rw){ 309 int w = rw->getWidth(); 310 int h = rw->getHeight(); 311 InputManager::setWindowExtents(w, h); 312 } 323 << "Ogre: " << message << std::endl; 324 } 325 326 /** 327 * Window has resized. 328 * @param rw The render window it occured in 329 */ 330 void GraphicsEngine::windowMoved(Ogre::RenderWindow *rw) 331 { 332 // note: this doesn't change the window extents 333 } 334 335 /** 336 * Window has resized. 337 * @param rw The render window it occured in 338 * @note GraphicsEngine has a render window stored itself. This is the same 339 * as rw. But we have to be careful when using multiple render windows! 340 */ 341 void GraphicsEngine::windowResized(Ogre::RenderWindow *rw) 342 { 343 // change the mouse clipping size for absolute mouse movements 344 int w = rw->getWidth(); 345 int h = rw->getHeight(); 346 InputManager::setWindowExtents(w, h); 347 } 348 349 /** 350 * Window has resized. 351 * @param rw The render window it occured in 352 */ 353 void GraphicsEngine::windowFocusChanged(Ogre::RenderWindow *rw) 354 { 355 // note: this doesn't change the window extents 356 } 357 358 /** 359 * Window has resized. 360 * @param rw The render window it occured in 361 */ 362 void GraphicsEngine::windowClosed(Ogre::RenderWindow *rw) 363 { 364 // using CommandExecutor in order to avoid depending on Orxonox class. 365 CommandExecutor::execute("exit", false); 366 } 313 367 } -
code/trunk/src/orxonox/GraphicsEngine.h
r1214 r1293 52 52 @brief Graphics engine manager class 53 53 */ 54 class _OrxonoxExport GraphicsEngine : public Ogre::WindowEventListener, public O rxonoxClass, public Ogre::LogListener54 class _OrxonoxExport GraphicsEngine : public Ogre::WindowEventListener, public Ogre::LogListener, public OrxonoxClass 55 55 { 56 friend class ClassIdentifier<GraphicsEngine>;57 56 public: 58 void setConfigPath(std::string path) { this->configPath_ = path; };59 57 void setConfigValues(); 60 void setup(); 61 bool load(std::string path); 62 void loadRessourceLocations(std::string path); 63 Ogre::SceneManager* getSceneManager(); 64 void initialise(); 58 bool setup(std::string& dataPath); 59 void declareRessourceLocations(); 60 bool loadRenderer(); 61 bool initialiseResources(); 62 bool createNewScene(); 63 65 64 void destroy(); 65 66 Ogre::SceneManager* getSceneManager() { return scene_; } 67 std::string& getDataPath() { return dataPath_; } 66 68 67 69 // several window properties … … 71 73 int getWindowHeight() const; 72 74 75 void windowMoved (Ogre::RenderWindow* rw); 76 void windowResized (Ogre::RenderWindow* rw); 77 void windowFocusChanged(Ogre::RenderWindow* rw); 78 void windowClosed (Ogre::RenderWindow* rw); 79 73 80 static GraphicsEngine& getSingleton(); 74 81 static GraphicsEngine* getSingletonPtr() { return &getSingleton(); } 75 76 void windowMoved(Ogre::RenderWindow* rw);77 void windowResized(Ogre::RenderWindow* rw);78 void windowFocusChanged(Ogre::RenderWindow* rw);79 82 80 83 private: … … 92 95 Ogre::RenderWindow* renderWindow_;//!< the current render window 93 96 //bool bOverwritePath_; //!< overwrites path 94 std::string configPath_; //!< path to config file97 //std::string configPath_; //!< path to config file 95 98 std::string dataPath_; //!< path to data file 96 99 std::string ogreLogfile_; //!< log file name for Ogre log messages -
code/trunk/src/orxonox/Main.cc
r1214 r1293 78 78 Orxonox* orx = Orxonox::getSingleton(); 79 79 80 bool res = false; 80 81 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE 81 orx->init(argc, argv, macBundlePath());82 res = orx->init(argc, argv, macBundlePath()); 82 83 #else 83 orx->init(argc, argv, "");84 res = orx->init(argc, argv, ""); 84 85 #endif 85 86 86 orx->start(); 87 if (res) 88 orx->start(); 87 89 orx->destroySingleton(); 88 90 /*} -
code/trunk/src/orxonox/Orxonox.cc
r1219 r1293 37 37 38 38 //****** STD ******* 39 //#include <iostream>40 //#include <exception>41 39 #include <deque> 42 40 43 41 //****** OGRE ****** 44 //#include <OgreException.h>45 42 #include <OgreFrameListener.h> 46 43 #include <OgreOverlay.h> … … 65 62 #include "core/InputBuffer.h" 66 63 #include "core/InputManager.h" 64 #include "core/TclBind.h" 67 65 68 66 // audio … … 158 156 159 157 /** 160 * create a new instance of Orxonox 161 */ 162 Orxonox::Orxonox() 163 { 164 this->mode_ = STANDALONE; 165 this->serverIp_ = ""; 166 this->ogre_ = &GraphicsEngine::getSingleton(); 167 this->timer_ = 0; 168 this->dataPath_ = ""; 169 this->auMan_ = 0; 170 this->orxonoxHUD_ = 0; 171 this->inputHandler_ = 0; 158 * Create a new instance of Orxonox. Avoid doing any actual work here. 159 */ 160 Orxonox::Orxonox() : 161 ogre_(0), 162 //auMan_(0), 163 timer_(0), 172 164 // turn on frame smoothing by setting a value different from 0 173 this->frameSmoothingTime_ = 0.0f; 174 this->bAbort_ = false; 175 this->timefactor_ = 1.0f; 176 } 177 178 /** 179 * destruct Orxonox 165 frameSmoothingTime_(0.0f), 166 orxonoxConsole_(0), 167 orxonoxHUD_(0), 168 bAbort_(false), 169 timefactor_(1.0f), 170 mode_(STANDALONE), 171 serverIp_("") 172 { 173 } 174 175 /** 176 * Destruct Orxonox. 180 177 */ 181 178 Orxonox::~Orxonox() … … 186 183 Loader::close(); 187 184 InputManager::destroy(); 188 if (this->auMan_)189 delete this->auMan_;185 //if (this->auMan_) 186 // delete this->auMan_; 190 187 if (this->timer_) 191 188 delete this->timer_; 192 189 GraphicsEngine::getSingleton().destroy(); 193 190 194 if ( client_g)195 delete client_g;191 if (network::Client::getSingleton()) 192 network::Client::destroySingleton(); 196 193 if (server_g) 197 194 delete server_g; 198 195 } 199 196 200 /**201 @brief Immediately deletes the orxonox object.202 Never use if you can help it while rendering!203 */204 void Orxonox::abortImmediateForce()205 {206 COUT(1) << "*** Orxonox Error: Orxonox object was unexpectedly destroyed." << std::endl;207 delete this;208 }209 197 210 198 /** … … 213 201 void Orxonox::abortRequest() 214 202 { 215 COUT(3) << " ***Orxonox: Abort requested." << std::endl;203 COUT(3) << "Orxonox: Abort requested." << std::endl; 216 204 bAbort_ = true; 217 205 } 218 206 219 207 /** 220 * @return singleton object208 * @return singleton reference 221 209 */ 222 210 Orxonox* Orxonox::getSingleton() … … 243 231 * @param path path to config (in home dir or something) 244 232 */ 245 voidOrxonox::init(int argc, char **argv, std::string path)233 bool Orxonox::init(int argc, char **argv, std::string path) 246 234 { 247 235 //TODO: find config file (assuming executable directory) … … 249 237 //TODO: give config file to Ogre 250 238 std::string mode; 239 std::string dataPath; 251 240 252 241 ArgReader ar(argc, argv); 253 242 ar.checkArgument("mode", mode, false); 254 ar.checkArgument("data", this->dataPath_, false);243 ar.checkArgument("data", dataPath, false); 255 244 ar.checkArgument("ip", serverIp_, false); 256 if(ar.errorHandling()) abortImmediateForce(); 257 if(mode == std::string("client")) 245 if(ar.errorHandling()) 246 return false; 247 248 if (mode == "client") 249 mode_ = CLIENT; 250 else if (mode == "server") 251 mode_ = SERVER; 252 else 258 253 { 259 mode _ = CLIENT;260 clientInit(path);254 mode = "standalone"; 255 mode_ = STANDALONE; 261 256 } 262 else if(mode== std::string("server")){ 263 mode_ = SERVER; 264 serverInit(path); 265 } 266 else{ 267 mode_ = STANDALONE; 268 standaloneInit(path); 269 } 270 } 271 272 void Orxonox::serverInit(std::string path) 273 { 274 COUT(2) << "initialising server" << std::endl; 275 276 ogre_->setConfigPath(path); 277 ogre_->setup(); 278 //root_ = ogre_->getRoot(); 279 if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */); 280 281 server_g = new network::Server(); 282 } 283 284 void Orxonox::clientInit(std::string path) 285 { 286 COUT(2) << "initialising client" << std::endl;\ 287 288 ogre_->setConfigPath(path); 289 ogre_->setup(); 290 if(serverIp_.compare("")==0) 291 client_g = new network::Client(); 292 else 293 client_g = new network::Client(serverIp_, NETWORK_PORT); 294 if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */); 295 } 296 297 void Orxonox::standaloneInit(std::string path) 298 { 299 COUT(2) << "initialising standalone mode" << std::endl; 300 301 ogre_->setConfigPath(path); 302 ogre_->setup(); 303 if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */); 257 COUT(3) << "Orxonox: Mode is " << mode << "." << std::endl; 258 259 //if (mode_ == DEDICATED) 260 // TODO: decide what to do here 261 //else 262 263 // for playable server, client and standalone, the startup 264 // procedure until the GUI is identical 265 266 TclBind::getInstance().setDataPath(dataPath); 267 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 268 Factory::createClassHierarchy(); 269 270 ogre_ = &GraphicsEngine::getSingleton(); 271 if (!ogre_->setup(path)) // creates ogre root and other essentials 272 return false; 273 274 return true; 304 275 } 305 276 … … 307 278 * start modules 308 279 */ 309 void Orxonox::start() 310 { 311 switch(mode_){ 280 bool Orxonox::start() 281 { 282 //if (mode == DEDICATED) 283 // do something else 284 //else 285 286 if (!ogre_->loadRenderer()) // creates the render window 287 return false; 288 289 // Calls the InputManager which sets up the input devices. 290 // The render window width and height are used to set up the mouse movement. 291 if (!InputManager::initialise(ogre_->getWindowHandle(), 292 ogre_->getWindowWidth(), ogre_->getWindowHeight(), true, true, true)) 293 return false; 294 295 // TODO: Spread this so that this call only initialises things needed for the GUI 296 if (!ogre_->initialiseResources()) 297 return false; 298 299 // TOOD: load the GUI here 300 // set InputManager to GUI mode 301 InputManager::setInputState(InputManager::IS_GUI); 302 // TODO: run GUI here 303 304 // The following lines depend very much on the GUI output, so they're probably misplaced here.. 305 306 InputManager::setInputState(InputManager::IS_NONE); 307 308 if (!loadPlayground()) 309 return false; 310 311 switch (mode_) 312 { 313 case SERVER: 314 if (!serverLoad()) 315 return false; 316 break; 312 317 case CLIENT: 313 clientStart(); 314 break; 315 case SERVER: 316 serverStart(); 318 if (!clientLoad()) 319 return false; 317 320 break; 318 321 default: 319 standaloneStart(); 322 if (!standaloneLoad()) 323 return false; 320 324 } 321 } 322 323 void Orxonox::clientStart(){ 324 ogre_->initialise(); 325 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 326 Factory::createClassHierarchy(); 327 328 329 auMan_ = new audio::AudioManager(); 330 325 326 InputManager::setInputState(InputManager::IS_NORMAL); 327 328 return startRenderLoop(); 329 } 330 331 /** 332 * Loads everything in the scene except for the actual objects. 333 * This includes HUD, Console.. 334 */ 335 bool Orxonox::loadPlayground() 336 { 337 ogre_->createNewScene(); 338 339 // Init audio 340 //auMan_ = new audio::AudioManager(); 341 //auMan_->ambientAdd("a1"); 342 //auMan_->ambientAdd("a2"); 343 //auMan_->ambientAdd("a3"); 344 //auMan->ambientAdd("ambient1"); 345 //auMan_->ambientStart(); 346 347 // Load the HUD 348 COUT(3) << "Orxonox: Loading HUD..." << std::endl; 331 349 Ogre::Overlay* hudOverlay = Ogre::OverlayManager::getSingleton().getByName("Orxonox/HUD1.2"); 332 350 orxonoxHUD_ = new HUD(); … … 335 353 hudOverlay->show(); 336 354 337 client_g->establishConnection(); 338 client_g->tick(0); 339 340 341 //setupInputSystem(); 342 343 startRenderLoop(); 344 } 345 346 void Orxonox::serverStart(){ 347 //TODO: start modules 348 ogre_->initialise(); 349 //TODO: run engine 350 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 351 Factory::createClassHierarchy(); 352 createScene(); 353 setupInputSystem(); 354 355 server_g->open(); 356 357 startRenderLoop(); 358 } 359 360 void Orxonox::standaloneStart(){ 361 //TODO: start modules 362 ogre_->initialise(); 363 //TODO: run engine 364 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 365 Factory::createClassHierarchy(); 366 createScene(); 367 setupInputSystem(); 368 369 startRenderLoop(); 370 } 371 372 void Orxonox::createScene(void) 373 { 374 // Init audio 375 auMan_ = new audio::AudioManager(); 376 377 // load this file from config 378 Level* startlevel = new Level("levels/sample.oxw"); 379 Loader::open(startlevel); 380 381 Ogre::Overlay* hudOverlay = Ogre::OverlayManager::getSingleton().getByName("Orxonox/HUD1.2"); 382 orxonoxHUD_ = new HUD(); 383 orxonoxHUD_->setEnergyValue(20); 384 orxonoxHUD_->setEnergyDistr(20,20,60); 385 hudOverlay->show(); 386 387 /* 388 auMan_->ambientAdd("a1"); 389 auMan_->ambientAdd("a2"); 390 auMan_->ambientAdd("a3"); 391 //auMan->ambientAdd("ambient1"); 392 auMan_->ambientStart(); 393 */ 394 } 395 396 /** 397 @brief Calls the InputHandler which sets up the input devices. 398 The render window width and height are used to set up the mouse movement. 399 */ 400 void Orxonox::setupInputSystem() 401 { 402 if (!InputManager::initialise(ogre_->getWindowHandle(), 403 ogre_->getWindowWidth(), ogre_->getWindowHeight())) 404 abortImmediateForce(); 405 InputManager::setInputState(InputManager::IS_NORMAL); 406 } 407 408 /** 409 Main loop of the orxonox game. 410 This is a new solution, using the ogre engine instead of being used by it. 411 An alternative solution would be to simply use the timer of the Root object, 412 but that implies using Ogre in any case. There would be no way to test 413 our code without the help of the root object. 414 There's even a chance that we can dispose of the root object entirely 415 in server mode. 416 About the loop: The design is almost exactly like the one in ogre, so that 417 if any part of ogre registers a framelisteners, it will still behave 418 correctly. Furthermore the time smoothing feature from ogre has been 419 implemented too. If turned on (see orxonox constructor), it will calculate 420 the dt_n by means of the recent most dt_n-1, dt_n-2, etc. 421 */ 422 void Orxonox::startRenderLoop() 423 { 355 COUT(3) << "Orxonox: Loading Console..." << std::endl; 424 356 InputBuffer* ib = dynamic_cast<InputBuffer*>(InputManager::getKeyHandler("buffer")); 425 357 /* … … 432 364 ib->registerListener(console, &Testconsole::exit, (char)0x1B, true); 433 365 */ 434 435 366 orxonoxConsole_ = new InGameConsole(ib); 436 367 ib->registerListener(orxonoxConsole_, &InGameConsole::listen, true); … … 441 372 ib->registerListener(orxonoxConsole_, &InGameConsole::exit, (char)0x1B, true); 442 373 374 return true; 375 } 376 377 /** 378 * Level loading method for server mode. 379 */ 380 bool Orxonox::serverLoad() 381 { 382 COUT(2) << "Loading level in server mode" << std::endl; 383 384 server_g = new network::Server(); 385 386 if (!loadScene()) 387 return false; 388 389 server_g->open(); 390 391 return true; 392 } 393 394 /** 395 * Level loading method for client mode. 396 */ 397 bool Orxonox::clientLoad() 398 { 399 COUT(2) << "Loading level in client mode" << std::endl;\ 400 401 if (serverIp_.compare("") == 0) 402 client_g = network::Client::createSingleton(); 403 else 404 client_g = network::Client::createSingleton(serverIp_, NETWORK_PORT); 405 406 client_g->establishConnection(); 407 client_g->tick(0); 408 409 return true; 410 } 411 412 /** 413 * Level loading method for standalone mode. 414 */ 415 bool Orxonox::standaloneLoad() 416 { 417 COUT(2) << "Loading level in standalone mode" << std::endl; 418 419 if (!loadScene()) 420 return false; 421 422 return true; 423 } 424 425 /** 426 * Helper method to load a level. 427 */ 428 bool Orxonox::loadScene() 429 { 430 Level* startlevel = new Level("levels/sample.oxw"); 431 Loader::open(startlevel); 432 433 return true; 434 } 435 436 437 /** 438 Main loop of the orxonox game. 439 About the loop: The design is almost exactly like the one in ogre, so that 440 if any part of ogre registers a framelisteners, it will still behave 441 correctly. Furthermore the time smoothing feature from ogre has been 442 implemented too. If turned on (see orxonox constructor), it will calculate 443 the dt_n by means of the recent most dt_n-1, dt_n-2, etc. 444 */ 445 bool Orxonox::startRenderLoop() 446 { 443 447 // first check whether ogre root object has been created 444 448 if (Ogre::Root::getSingletonPtr() == 0) 445 449 { 446 COUT(2) << " ***Orxonox Error: Could not start rendering. No Ogre root object found" << std::endl;447 return ;450 COUT(2) << "Orxonox Error: Could not start rendering. No Ogre root object found" << std::endl; 451 return false; 448 452 } 449 453 Ogre::Root& ogreRoot = Ogre::Root::getSingleton(); … … 465 469 timer_->reset(); 466 470 471 COUT(3) << "Orxonox: Starting the main loop." << std::endl; 467 472 while (!bAbort_) 468 473 { … … 490 495 for (Iterator<Tickable> it = ObjectList<Tickable>::start(); it; ++it) 491 496 it->tick((float)evt.timeSinceLastFrame * this->timefactor_); 492 orxonoxConsole_->tick((float)evt.timeSinceLastFrame * this->timefactor_); 497 // Iterate through all TickableReals and call their tick(dt) function 498 for (Iterator<TickableReal> it = ObjectList<TickableReal>::start(); it; ++it) 499 it->tick((float)evt.timeSinceLastFrame); 500 orxonoxConsole_->tick((float)evt.timeSinceLastFrame); 493 501 494 502 // don't forget to call _fireFrameStarted in ogre to make sure … … 510 518 ogreRoot._fireFrameEnded(evt); 511 519 } 520 521 if(mode_==CLIENT) 522 network::Client::getSingleton()->closeConnection(); 523 else if(mode_==SERVER) 524 server_g->close(); 525 return true; 512 526 } 513 527 … … 550 564 } 551 565 566 /** 567 * Static function that shows the console in game mode. 568 */ 552 569 void Orxonox::activateConsole() 553 570 { 571 // currently, the console shows itself when feeded with input. 554 572 InputManager::setInputState(InputManager::IS_CONSOLE); 555 573 } -
code/trunk/src/orxonox/Orxonox.h
r1219 r1293 57 57 { 58 58 public: 59 voidinit(int argc, char **argv, std::string path);60 voidstart();61 void abortImmediateForce(); 59 bool init(int argc, char **argv, std::string path); 60 bool start(); 61 62 62 void abortRequest(); 63 inline audio::AudioManager* getAudioManagerPointer() { return auMan_; };63 //inline audio::AudioManager* getAudioManagerPointer() { return auMan_; }; 64 64 65 65 static Orxonox* getSingleton(); … … 79 79 ~Orxonox(); 80 80 81 // init functions 82 void serverInit(std::string path); 83 void clientInit(std::string path); 84 void standaloneInit(std::string path); 81 bool loadPlayground(); 85 82 86 // run functions 87 void serverStart(); 88 void clientStart(); 89 void standaloneStart(); 83 bool serverLoad(); 84 bool clientLoad(); 85 bool standaloneLoad(); 90 86 91 void createScene(); 92 void setupInputSystem(); 93 void startRenderLoop(); 87 bool loadScene(); 88 89 bool startRenderLoop(); 90 94 91 float calculateEventTime(unsigned long, std::deque<unsigned long>&); 95 92 96 93 private: 97 94 GraphicsEngine* ogre_; //!< our dearest graphics engine <3 98 std::string dataPath_; //!< path to data 99 audio::AudioManager* auMan_; //!< audio manager 100 InputManager* inputHandler_; //!< Handles input with key bindings 95 //audio::AudioManager* auMan_; //!< audio manager 101 96 Ogre::Timer* timer_; //!< Main loop timer 102 97 // TODO: make this a config-value by creating a config class for orxonox -
code/trunk/src/orxonox/OrxonoxPlatform.h
r1064 r1293 21 21 * 22 22 * Author: 23 * An unknown man from the Ogre development crew23 * ... 24 24 * Co-authors: 25 25 * Reto Grieder -
code/trunk/src/orxonox/console/InGameConsole.cc
r1223 r1293 54 54 const float BLINK = 0.25; 55 55 56 InGameConsole::InGameConsole(InputBuffer* ib){ 56 InGameConsole::InGameConsole(InputBuffer* ib) : 57 windowW(0), windowH(0), 58 scroll(0), scrollTimer(0.0f), 59 cursor(0.0f), 60 active(false), 61 ib_(ib), 62 om(0), 63 consoleOverlay(0), 64 consoleOverlayContainer(0), 65 consoleOverlayNoise(0), 66 consoleOverlayBorder(0), 67 consoleOverlayTextAreas(0) 68 { 57 69 //RegisterObject(InGameConsole); 58 ib_ = ib;59 active = false;60 cursor = 0.0;61 70 init(); 62 71 } -
code/trunk/src/orxonox/objects/Ambient.cc
r1209 r1293 57 57 RegisterObject(Ambient); 58 58 Ambient::instance_s = this; 59 registerAllVariables(); 59 60 } 60 61 … … 63 64 } 64 65 66 bool Ambient::create(){ 67 GraphicsEngine::getSingleton().getSceneManager()->setAmbientLight(ambientLight_); 68 return true; 69 } 70 71 void Ambient::registerAllVariables(){ 72 registerVar(&ambientLight_, sizeof(ColourValue), network::DATA); 73 74 } 75 65 76 void Ambient::loadParams(TiXmlElement* xmlElem) 66 77 { … … 83 94 { 84 95 GraphicsEngine::getSingleton().getSceneManager()->setAmbientLight(colour); 96 ambientLight_=colour; 85 97 } 86 98 … … 96 108 97 109 XMLPortParamLoadOnly(Ambient, "colourvalue", setAmbientLight, xmlelement, mode); 110 create(); 98 111 } 99 112 } -
code/trunk/src/orxonox/objects/Ambient.h
r1056 r1293 34 34 #include "util/Math.h" 35 35 #include "core/BaseObject.h" 36 #include "network/Synchronisable.h" 36 37 37 38 namespace orxonox 38 39 { 39 class _OrxonoxExport Ambient : public BaseObject 40 class _OrxonoxExport Ambient : public BaseObject, network::Synchronisable 40 41 { 41 42 public: … … 46 47 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 47 48 void setAmbientLight(const ColourValue& colour); 49 bool create(); 50 void registerAllVariables(); 48 51 49 52 static void setAmbientLightTest(const ColourValue& colour) … … 52 55 private: 53 56 static Ambient* instance_s; 57 ColourValue ambientLight_; 54 58 55 59 }; -
code/trunk/src/orxonox/objects/Camera.cc
r1209 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht 26 26 * 27 27 */ … … 29 29 #include "OrxonoxStableHeaders.h" 30 30 #include "Camera.h" 31 #include "CameraHandler.h" 31 32 32 33 #include <string> … … 47 48 namespace orxonox 48 49 { 49 CreateFactory(Camera);50 50 51 Camera::Camera() 51 Camera::Camera(Ogre::SceneNode* node) 52 { 53 this->bHasFocus_ = false; 54 this->cameraNode_ = GraphicsEngine::getSingleton().getSceneManager()->getRootSceneNode()->createChildSceneNode(node->getName() + "Camera"); 55 if( node != NULL ) 56 this->setPositionNode(node); 57 } 58 59 Camera::~Camera() 60 { 61 CameraHandler::getInstance()->releaseFocus(this); 62 } 63 64 void Camera::setPositionNode(Ogre::SceneNode* node) 65 { 66 this->positionNode_ = node; 67 // set camera to node values according to camera mode 68 } 69 70 void Camera::setTargetNode(Ogre::SceneNode* obj) 71 { 72 this->targetNode_ = obj; 73 } 74 75 void Camera::tick(float dt) 76 { 77 if(this->positionNode_ != NULL) { 78 // this stuff here may need some adjustments 79 Vector3 offset = this->positionNode_->getWorldPosition() - this->cameraNode_->getPosition(); 80 this->cameraNode_->translate(15*dt*offset); 81 82 this->cameraNode_->setOrientation(Quaternion::Slerp(0.7, this->positionNode_->getWorldOrientation(), this->cameraNode_->getWorldOrientation(), false)); 83 } 84 } 85 86 /** 87 don't move anything before here! here the Ogre camera is set to values of this camera 88 always call update after changes 89 */ 90 void Camera::update() 91 { 92 if(this->positionNode_ != NULL) 52 93 { 53 RegisterObject(Camera); 94 this->cameraNode_->setPosition(this->positionNode_->getWorldPosition()); 95 this->cameraNode_->setOrientation(this->positionNode_->getWorldOrientation()); 54 96 } 97 } 55 98 56 Camera::~Camera() 57 { 58 } 99 /** 100 what to do when camera loses focus (do not request focus in this function!!) 101 this is called by the CameraHandler singleton class to notify the camera 102 */ 103 void Camera::removeFocus() 104 { 105 this->bHasFocus_ = false; 106 this->cameraNode_->detachObject(this->cam_); 107 } 59 108 60 void Camera::loadParams(TiXmlElement* xmlElem) 61 { 62 Ogre::SceneManager* mgr = GraphicsEngine::getSingleton().getSceneManager(); 63 64 if (xmlElem->Attribute("name") && xmlElem->Attribute("pos") && xmlElem->Attribute("lookat") && xmlElem->Attribute("node")) 65 { 66 // <Camera name="Camera" pos="0,0,-250" lookat="0,0,0" /> 67 68 std::string name = xmlElem->Attribute("name"); 69 std::string pos = xmlElem->Attribute("pos"); 70 std::string lookat = xmlElem->Attribute("lookat"); 71 72 Ogre::Camera *cam = mgr->createCamera(name); 73 74 float x, y, z; 75 SubString posVec(xmlElem->Attribute("pos"), ','); 76 convertValue<std::string, float>(&x, posVec[0]); 77 convertValue<std::string, float>(&y, posVec[1]); 78 convertValue<std::string, float>(&z, posVec[2]); 79 80 cam->setPosition(Vector3(x,y,z)); 81 82 posVec = SubString(xmlElem->Attribute("lookat"), ','); 83 convertValue<std::string, float>(&x, posVec[0]); 84 convertValue<std::string, float>(&y, posVec[1]); 85 convertValue<std::string, float>(&z, posVec[2]); 86 87 cam->lookAt(Vector3(x,y,z)); 88 89 std::string node = xmlElem->Attribute("node"); 90 91 Ogre::SceneNode* sceneNode = (Ogre::SceneNode*)mgr->getRootSceneNode()->createChildSceneNode(node); //getChild(node); 92 sceneNode->attachObject((Ogre::MovableObject*)cam); 93 94 // FIXME: unused var 95 //Ogre::Viewport* vp = 96 GraphicsEngine::getSingleton().getRenderWindow()->addViewport(cam); 97 98 99 COUT(4) << "Loader: Created camera "<< name << std::endl << std::endl; 100 } 101 } 109 void Camera::setFocus(Ogre::Camera* ogreCam) 110 { 111 this->bHasFocus_ = true; 112 this->cam_ = ogreCam; 113 this->cam_->setOrientation(this->cameraNode_->getWorldOrientation()); 114 this->cameraNode_->attachObject(this->cam_); 115 } 102 116 } -
code/trunk/src/orxonox/objects/Camera.h
r1056 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht 26 26 * 27 27 */ … … 30 30 #define _Camera_H__ 31 31 32 #include <OgrePrerequisites.h> 33 #include <OgreSceneNode.h> 34 #include <OgreCamera.h> 35 32 36 #include "OrxonoxPrereqs.h" 33 34 #include "core/BaseObject.h"35 37 36 38 namespace orxonox 37 39 { 38 class _OrxonoxExport Camera : public BaseObject40 class _OrxonoxExport Camera 39 41 { 40 public: 41 Camera(); 42 virtual ~Camera(); 42 friend class CameraHandler; 43 public: 44 Camera(Ogre::SceneNode* node = NULL); 45 virtual ~Camera(); 43 46 47 void setPositionNode(Ogre::SceneNode* node); 48 inline Ogre::SceneNode* getCameraNode() { return this->positionNode_; } 49 // maybe also BaseObject 50 void setTargetNode(Ogre::SceneNode* obj); 44 51 45 void loadParams(TiXmlElement* xmlElem); 52 void tick(float dt); 53 void update(); 54 inline bool hasFocus() { return this->bHasFocus_; } 46 55 47 private: 56 private: 57 void removeFocus(); 58 void setFocus(Ogre::Camera* ogreCam); 48 59 49 60 private: 61 Ogre::SceneNode* targetNode_; 62 Ogre::SceneNode* positionNode_; 63 Ogre::SceneNode* cameraNode_; 64 Ogre::Vector3 oldPos; 65 Ogre::Camera* cam_; 66 bool bHasFocus_; 50 67 }; 51 68 } -
code/trunk/src/orxonox/objects/Explosion.cc
r1056 r1293 45 45 CreateFactory(Explosion); 46 46 47 Explosion::Explosion(WorldEntity* owner) 47 Explosion::Explosion(WorldEntity* owner) : 48 lifetime_(0.4), 49 particle_(0) 48 50 { 49 51 RegisterObject(Explosion); 50 51 this->particle_ = 0;52 this->lifetime_ = 0.4;53 52 54 53 if (owner) -
code/trunk/src/orxonox/objects/Model.cc
r1209 r1293 49 49 } 50 50 51 void Model::loadParams(TiXmlElement* xmlElem)52 {53 WorldEntity::loadParams(xmlElem);54 55 if (xmlElem->Attribute("mesh"))56 {57 meshSrc_ = xmlElem->Attribute("mesh");58 }59 create();60 }61 62 51 /** 63 52 @brief XML loading and saving. … … 73 62 XMLPortParamLoadOnly(Model, "mesh", setMesh, xmlelement, mode); 74 63 75 create();64 Model::create(); 76 65 } 77 66 … … 82 71 83 72 bool Model::create(){ 84 WorldEntity::create(); 73 if(!WorldEntity::create()) 74 return false; 85 75 if ((this->meshSrc_ != "") && (this->meshSrc_.size() > 0)) 86 76 { 87 77 this->mesh_.setMesh(meshSrc_); 88 78 this->attachObject(this->mesh_.getEntity()); 89 COUT(4) << "Loader : Created model" << std::endl;79 COUT(4) << "Loader (Model.cc): Created model" << std::endl; 90 80 } 91 81 return true; … … 93 83 94 84 void Model::registerAllVariables(){ 95 WorldEntity::registerAllVariables(); 85 // WorldEntity::registerAllVariables(); 86 COUT(5) << "Model.cc:registering new meshsrc with size: " << meshSrc_.length()+1 << " this: " << this << std::endl; 96 87 registerVar(&meshSrc_, meshSrc_.length() + 1, network::STRING); 97 88 } -
code/trunk/src/orxonox/objects/Model.h
r1056 r1293 43 43 Model(); 44 44 virtual ~Model(); 45 virtual void loadParams(TiXmlElement* xmlElem);46 45 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 47 46 void setMesh(const std::string& meshname); -
code/trunk/src/orxonox/objects/NPC.cc
r1056 r1293 36 36 CreateFactory(NPC); 37 37 38 NPC::NPC() 38 NPC::NPC() : 39 movable_(true) 39 40 { 40 41 RegisterObject(NPC); 41 movable_ = true;42 registerAllVariables(); 42 43 } 43 44 … … 59 60 this->translate(location); 60 61 movable_ = movable; 62 } 63 64 void NPC::registerAllVariables(){ 65 Model::registerAllVariables(); 66 registerVar(&movable_, sizeof(movable_), network::DATA); 67 } 68 69 bool NPC::create(){ 70 Model::create(); 71 return true; 61 72 } 62 73 -
code/trunk/src/orxonox/objects/NPC.h
r1056 r1293 52 52 void update(); 53 53 void setValues(Vector3 location, Vector3 speed, Vector3 acceleration, bool movable); 54 void registerAllVariables(); 55 bool create(); 54 56 55 57 private: -
code/trunk/src/orxonox/objects/Projectile.cc
r1056 r1293 42 42 CreateFactory(Projectile); 43 43 44 Projectile::Projectile(SpaceShip* owner) 44 Projectile::Projectile(SpaceShip* owner) : 45 owner_(owner) 45 46 { 46 47 RegisterObject(Projectile); 47 48 48 49 this->setConfigValues(); 49 50 this->owner_ = owner;51 50 52 51 this->billboard_.setBillboardSet("Examples/Flare", ColourValue(1.0, 1.0, 0.5), 1); -
code/trunk/src/orxonox/objects/Skybox.cc
r1209 r1293 47 47 { 48 48 RegisterObject(Skybox); 49 registerAllVariables(); 49 50 } 50 51 … … 57 58 if (xmlElem->Attribute("src")) 58 59 { 59 s td::string skyboxSrc= xmlElem->Attribute("src");60 this->setSkybox(skyboxSrc);60 skyboxSrc_ = xmlElem->Attribute("src"); 61 this->create(); 61 62 62 COUT(4) << "Loader: Set skybox: "<< skyboxSrc << std::endl << std::endl;63 COUT(4) << "Loader: Set skybox: "<< skyboxSrc_ << std::endl << std::endl; 63 64 } 64 65 } … … 69 70 } 70 71 72 void Skybox::setSkyboxSrc(const std::string& src){ 73 skyboxSrc_ = src; 74 } 75 71 76 /** 72 77 @brief XML loading and saving. … … 79 84 BaseObject::XMLPort(xmlelement, mode); 80 85 81 XMLPortParamLoadOnly(Skybox, "src", setSkybox, xmlelement, mode); 86 XMLPortParamLoadOnly(Skybox, "src", setSkyboxSrc, xmlelement, mode); 87 create(); 82 88 } 89 90 bool Skybox::create(){ 91 this->setSkybox(skyboxSrc_); 92 return true; 93 } 94 95 void Skybox::registerAllVariables(){ 96 registerVar(&skyboxSrc_, skyboxSrc_.length()+1 ,network::STRING); 97 } 98 83 99 } -
code/trunk/src/orxonox/objects/Skybox.h
r1056 r1293 33 33 34 34 #include "core/BaseObject.h" 35 #include "network/Synchronisable.h" 35 36 36 37 namespace orxonox 37 38 { 38 class _OrxonoxExport Skybox : public BaseObject 39 class _OrxonoxExport Skybox : public BaseObject, public network::Synchronisable 39 40 { 40 41 public: … … 45 46 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 46 47 void setSkybox(const std::string& skyboxname); 48 49 bool create(); 50 void registerAllVariables(); 51 void setSkyboxSrc(const std::string &src); 47 52 48 53 private: 54 std::string skyboxSrc_; 49 55 50 56 -
code/trunk/src/orxonox/objects/SpaceShip.cc
r1219 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht 26 26 * 27 27 */ … … 37 37 #include <OgreSceneNode.h> 38 38 39 #include "CameraHandler.h" 39 40 #include "tinyxml/tinyxml.h" 40 41 #include "ois/OIS.h" … … 50 51 #include "core/XMLPort.h" 51 52 #include "core/ConsoleCommand.h" 53 #include "network/Client.h" 52 54 53 55 namespace orxonox … … 62 64 SpaceShip* SpaceShip::instance_s; 63 65 64 SpaceShip::SpaceShip() 66 SpaceShip::SpaceShip() : 67 //testvector_(0,0,0), 68 //bInvertYAxis_(false), 69 setMouseEventCallback_(false), 70 bLMousePressed_(false), 71 bRMousePressed_(false), 72 camNode_(0), 73 cam_(0), 74 camName_("CamNode"), 75 tt_(0), 76 redNode_(0), 77 greenNode_(0), 78 blinkTime_(0.0f), 79 chNearNode_(0), 80 chFarNode_(0), 81 timeToReload_(0.0f), 82 //reloadTime_(0.0f), 83 maxSideAndBackSpeed_(0.0f), 84 maxSpeed_(0.0f), 85 maxRotation_(0.0f), 86 translationAcceleration_(0.0f), 87 rotationAcceleration_(0.0f), 88 translationDamping_(0.0f), 89 rotationDamping_(0.0f), 90 maxRotationRadian_(0), 91 rotationAccelerationRadian_(0), 92 rotationDampingRadian_(0), 93 zeroRadian_(0), 94 mouseXRotation_(0), 95 mouseYRotation_(0), 96 mouseX_(0.0f), 97 mouseY_(0.0f), 98 emitterRate_(0.0f), 99 server_(false) 65 100 { 66 101 RegisterObject(SpaceShip); … … 71 106 this->setConfigValues(); 72 107 73 this->setMouseEventCallback_ = false;74 this->bLMousePressed_ = false;75 this->bRMousePressed_ = false;76 this->mouseX_ = 0;77 this->mouseY_ = 0;78 79 this->camNode_ = 0;80 81 this->tt_ = 0;82 this->redNode_ = 0;83 this->greenNode_ = 0;84 this->blinkTime_ = 0;85 86 this->timeToReload_ = 0;87 88 this->maxSpeed_ = 0;89 this->maxSideAndBackSpeed_ = 0;90 this->maxRotation_ = 0;91 this->translationAcceleration_ = 0;92 this->rotationAcceleration_ = 0;93 this->translationDamping_ = 0;94 this->rotationDamping_ = 0;95 96 this->maxRotationRadian_ = 0;97 this->rotationAccelerationRadian_ = 0;98 this->rotationDampingRadian_ = 0;99 this->zeroRadian_ = Radian(0);100 108 101 109 this->setRotationAxis(1, 0, 0); 102 110 this->setStatic(false); 103 /*104 this->moveForward_ = 0;105 this->rotateUp_ = 0;106 this->rotateDown_ = 0;107 this->rotateRight_ = 0;108 this->rotateLeft_ = 0;109 this->loopRight_ = 0;110 this->loopLeft_ = 0;111 this->brakeForward_ = 0;112 this->brakeRotate_ = 0;113 this->brakeLoop_ = 0;114 this->speedForward_ = 0;115 this->speedRotateUpDown_ = 0;116 this->speedRotateRightLeft_ = 0;117 this->speedLoopRightLeft_ = 0;118 this->maxSpeedForward_ = 0;119 this->maxSpeedRotateUpDown_ = 0;120 this->maxSpeedRotateRightLeft_ = 0;121 this->maxSpeedLoopRightLeft_ = 0;122 this->accelerationForward_ = 0;123 this->accelerationRotateUpDown_ = 0;124 this->accelerationRotateRightLeft_ = 0;125 this->accelerationLoopRightLeft_ = 0;126 127 this->speed = 250;128 this->loop = 100;129 this->rotate = 10;130 this->mouseX = 0;131 this->mouseY = 0;132 this->maxMouseX = 0;133 this->minMouseX = 0;134 this->moved = false;135 136 this->brakeRotate(rotate*10);137 this->brakeLoop(loop);138 */139 // this->create();140 141 111 142 112 COUT(3) << "Info: SpaceShip was loaded" << std::endl; … … 147 117 if (this->tt_) 148 118 delete this->tt_; 119 if(setMouseEventCallback_) 120 InputManager::removeMouseHandler("SpaceShip"); 121 if (this->cam_) 122 delete this->cam_; 149 123 } 150 124 … … 158 132 159 133 void SpaceShip::registerAllVariables(){ 160 Model::registerAllVariables(); 161 162 134 registerVar( &camName_, camName_.length()+1, network::STRING, 0x1); 135 registerVar( &maxSpeed_, sizeof(maxSpeed_), network::DATA, 0x1); 136 registerVar( &maxSideAndBackSpeed_, sizeof(maxSideAndBackSpeed_), network::DATA, 0x1); 137 registerVar( &maxRotation_, sizeof(maxRotation_), network::DATA, 0x1); 138 registerVar( &translationAcceleration_, sizeof(translationAcceleration_), network::DATA, 0x1); 139 registerVar( &rotationAcceleration_, sizeof(rotationAcceleration_), network::DATA, 0x1); 140 registerVar( &rotationAccelerationRadian_, sizeof(rotationAccelerationRadian_), network::DATA, 0x1); 141 registerVar( &translationDamping_, sizeof(translationDamping_), network::DATA, 0x1); 142 registerVar( &rotationDamping_, sizeof(rotationDamping_), network::DATA, 0x1); 143 registerVar( &rotationDampingRadian_, sizeof(rotationDampingRadian_), network::DATA, 0x1); 163 144 164 145 } … … 166 147 void SpaceShip::init() 167 148 { 149 if ((server_ || ( network::Client::getSingleton() && network::Client::getSingleton()->getShipID()==objectID ) )) 150 { 151 if (!setMouseEventCallback_) 152 { 153 InputManager::addMouseHandler(this, "SpaceShip"); 154 setMouseEventCallback_ = true; 155 } 156 } 157 168 158 // START CREATING THRUSTER 169 159 this->tt_ = new ParticleInterface(GraphicsEngine::getSingleton().getSceneManager(),"twinthruster" + this->getName(),"Orxonox/engineglow"); … … 191 181 this->greenBillboard_.setBillboardSet("Examples/Flare", ColourValue(0.0, 1.0, 0.0), 1); 192 182 193 this->redNode_ = this->getNode()->createChildSceneNode(this->getName() + "red", Vector3(0.3, 4. 7, -0.3));183 this->redNode_ = this->getNode()->createChildSceneNode(this->getName() + "red", Vector3(0.3, 4.0, -0.3)); 194 184 this->redNode_->setInheritScale(false); 195 this->greenNode_ = this->getNode()->createChildSceneNode(this->getName() + "green", Vector3(0.3, -4. 7, -0.3));185 this->greenNode_ = this->getNode()->createChildSceneNode(this->getName() + "green", Vector3(0.3, -4.0, -0.3)); 196 186 this->greenNode_->setInheritScale(false); 197 187 … … 218 208 this->chFarNode_->setScale(0.4, 0.4, 0.4); 219 209 210 createCamera(); 220 211 // END of testing crosshair 221 212 } … … 232 223 Model::loadParams(xmlElem); 233 224 this->create(); 225 this->getFocus(); 234 226 /* 235 227 if (xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft")) … … 246 238 247 239 COUT(4) << "Loader: Initialized spaceship steering with values " << maxSpeedForward_ << " " << maxSpeedRotateUpDown_ << " " << maxSpeedRotateRightLeft_ << " " << maxSpeedLoopRightLeft_ << " " << std::endl; 248 240 } 249 241 */ 250 242 if (xmlElem->Attribute("maxSpeed") && xmlElem->Attribute("maxSideAndBackSpeed") && xmlElem->Attribute("maxRotation") && xmlElem->Attribute("transAcc") && xmlElem->Attribute("rotAcc") && xmlElem->Attribute("transDamp") && xmlElem->Attribute("rotDamp")) … … 272 264 273 265 COUT(4) << "Loader: Initialized SpaceShip" << std::endl; 274 275 276 277 278 279 266 } 267 268 if (xmlElem->Attribute("camera")) 269 { 270 this->setCamera(); 271 } 280 272 } 281 273 282 274 void SpaceShip::setCamera(const std::string& camera) 283 275 { 284 Ogre::Camera *cam = GraphicsEngine::getSingleton().getSceneManager()->createCamera("ShipCam"); 285 this->camNode_ = this->getNode()->createChildSceneNode("CamNode"); 286 /* 287 // node->setInheritOrientation(false); 288 cam->setPosition(Vector3(0,50,-150)); 289 cam->lookAt(Vector3(0,20,0)); 290 cam->roll(Degree(0)); 291 */ 292 293 cam->setPosition(Vector3(-200,0,35)); 276 camName_=camera; 277 // change camera attributes here, if you want to ;) 278 } 279 280 void SpaceShip::getFocus(){ 281 COUT(4) << "requesting focus" << std::endl; 282 if(network::Client::getSingleton()==0 || network::Client::getSingleton()->getShipID()==objectID) 283 CameraHandler::getInstance()->requestFocus(cam_); 284 285 } 286 287 void SpaceShip::createCamera(){ 288 // COUT(4) << "begin camera creation" << std::endl; 289 this->camNode_ = this->getNode()->createChildSceneNode(camName_); 290 COUT(4) << "position: (this)" << this->getNode()->getPosition() << std::endl; 291 this->camNode_->setPosition(Vector3(-50,0,10)); 292 Quaternion q1 = Quaternion(Radian(Degree(90)),Vector3(0,-1,0)); 293 Quaternion q2 = Quaternion(Radian(Degree(90)),Vector3(0,0,-1)); 294 camNode_->setOrientation(q1*q2); 295 COUT(4) << "position: (cam)" << this->camNode_->getPosition() << std::endl; 296 cam_ = new Camera(this->camNode_); 297 298 cam_->setTargetNode(this->getNode()); 294 299 // cam->setPosition(Vector3(0,-350,0)); 295 cam->lookAt(Vector3(0,0,35));296 cam->roll(Degree(-90));297 298 this->camNode_->attachObject(cam);299 GraphicsEngine::getSingleton().getRenderWindow()->addViewport(cam); 300 if(network::Client::getSingleton()!=0 && network::Client::getSingleton()->getShipID()==objectID){ 301 this->setBacksync(true); 302 CameraHandler::getInstance()->requestFocus(cam_); 303 } 304 300 305 } 301 306 … … 333 338 XMLPortParamLoadOnly(SpaceShip, "transDamp", setTransDamp, xmlelement, mode); 334 339 XMLPortParamLoadOnly(SpaceShip, "rotDamp", setRotDamp, xmlelement, mode); 340 server_=true; // TODO: this is only a hack 341 SpaceShip::create(); 342 getFocus(); 335 343 } 336 344 … … 343 351 } 344 352 345 bool SpaceShip::mouseMoved(const OIS::MouseEvent &e)353 bool SpaceShip::mouseMoved(const MouseState& state) 346 354 { 347 355 /* … … 360 368 if (this->bRMousePressed_) 361 369 { 362 this->camNode_->roll(Degree(- e.state.X.rel * 0.10));363 this->camNode_->yaw(Degree( e.state.Y.rel * 0.10));364 } 365 else 366 { 367 float minDimension = e.state.height;368 if ( e.state.width < minDimension)369 minDimension = e.state.width;370 371 this->mouseX_ += e.state.X.rel;370 this->camNode_->roll(Degree(-state.X.rel * 0.10)); 371 this->camNode_->yaw(Degree(state.Y.rel * 0.10)); 372 } 373 else 374 { 375 float minDimension = state.height; 376 if (state.width < minDimension) 377 minDimension = state.width; 378 379 this->mouseX_ += state.X.rel; 372 380 if (this->mouseX_ < -minDimension) 373 381 this->mouseX_ = -minDimension; … … 375 383 this->mouseX_ = minDimension; 376 384 377 this->mouseY_ += e.state.Y.rel;385 this->mouseY_ += state.Y.rel; 378 386 if (this->mouseY_ < -minDimension) 379 387 this->mouseY_ = -minDimension; … … 403 411 } 404 412 405 bool SpaceShip::mouse Pressed(const OIS::MouseEvent &e, OIS::MouseButtonIDid)406 { 407 if (id == OIS::MB_Left)413 bool SpaceShip::mouseButtonPressed(const MouseState& state, MouseButton::Enum id) 414 { 415 if (id == MouseButton::Left) 408 416 this->bLMousePressed_ = true; 409 else if (id == OIS::MB_Right)417 else if (id == MouseButton::Right) 410 418 this->bRMousePressed_ = true; 411 419 … … 413 421 } 414 422 415 bool SpaceShip::mouse Released(const OIS::MouseEvent &e, OIS::MouseButtonIDid)416 { 417 if (id == OIS::MB_Left)423 bool SpaceShip::mouseButtonReleased(const MouseState& state, MouseButton::Enum id) 424 { 425 if (id == MouseButton::Left) 418 426 this->bLMousePressed_ = false; 419 else if (id == OIS::MB_Right)427 else if (id == MouseButton::Right) 420 428 { 421 429 this->bRMousePressed_ = false; … … 428 436 void SpaceShip::tick(float dt) 429 437 { 430 if (!setMouseEventCallback_) 431 { 432 InputManager::addMouseHandler(this, "SpaceShip"); 433 setMouseEventCallback_ = true; 434 } 438 if (this->cam_) 439 this->cam_->tick(dt); 435 440 436 441 if (this->redNode_ && this->greenNode_) … … 450 455 if (this->bLMousePressed_ && this->timeToReload_ <= 0) 451 456 { 452 new Projectile(this); 457 Projectile *p = new Projectile(this); 458 p->setBacksync(true); 453 459 this->timeToReload_ = this->reloadTime_; 454 460 } 455 456 OIS::Keyboard* mKeyboard = InputManager::getKeyboard();457 461 458 462 … … 522 526 } 523 527 524 if (mKeyboard->isKeyDown(OIS::KC_UP) || mKeyboard->isKeyDown(OIS::KC_W)) 528 if( (network::Client::getSingleton() && network::Client::getSingleton()->getShipID() == objectID) || server_ ) 529 { 530 COUT(4) << "steering our ship: " << objectID << std::endl; 531 if (InputManager::isKeyDown(KeyCode::Up) || InputManager::isKeyDown(KeyCode::W)) 525 532 this->acceleration_.x = this->translationAcceleration_; 526 else if(mKeyboard->isKeyDown(OIS::KC_DOWN) || mKeyboard->isKeyDown(OIS::KC_S))533 else if(InputManager::isKeyDown(KeyCode::Down) || InputManager::isKeyDown(KeyCode::S)) 527 534 this->acceleration_.x = -this->translationAcceleration_; 528 else535 else 529 536 this->acceleration_.x = 0; 530 537 531 if (mKeyboard->isKeyDown(OIS::KC_RIGHT) || mKeyboard->isKeyDown(OIS::KC_D))538 if (InputManager::isKeyDown(KeyCode::Right) || InputManager::isKeyDown(KeyCode::D)) 532 539 this->acceleration_.y = -this->translationAcceleration_; 533 else if (mKeyboard->isKeyDown(OIS::KC_LEFT) || mKeyboard->isKeyDown(OIS::KC_A))540 else if (InputManager::isKeyDown(KeyCode::Left) || InputManager::isKeyDown(KeyCode::A)) 534 541 this->acceleration_.y = this->translationAcceleration_; 535 else542 else 536 543 this->acceleration_.y = 0; 537 544 538 if (mKeyboard->isKeyDown(OIS::KC_DELETE) || mKeyboard->isKeyDown(OIS::KC_Q))545 if (InputManager::isKeyDown(KeyCode::Delete) || InputManager::isKeyDown(KeyCode::Q)) 539 546 this->momentum_ = Radian(-this->rotationAccelerationRadian_); 540 else if (mKeyboard->isKeyDown(OIS::KC_PGDOWN) || mKeyboard->isKeyDown(OIS::KC_E))547 else if (InputManager::isKeyDown(KeyCode::PageDown) || InputManager::isKeyDown(KeyCode::E)) 541 548 this->momentum_ = Radian(this->rotationAccelerationRadian_); 542 else549 else 543 550 this->momentum_ = 0; 551 }/*else 552 COUT(4) << "not steering ship: " << objectID << " our ship: " << network::Client::getSingleton()->getShipID() << std::endl;*/ 544 553 545 554 WorldEntity::tick(dt); -
code/trunk/src/orxonox/objects/SpaceShip.h
r1219 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht 26 26 * 27 27 */ … … 34 34 #include <OgrePrerequisites.h> 35 35 36 #include "core/InputHandler.h" 36 #include "core/InputInterfaces.h" 37 #include "Camera.h" 37 38 #include "Model.h" 38 39 #include "../tools/BillboardSet.h" … … 62 63 void setRotDamp(float value); 63 64 65 void getFocus(); 66 64 67 static void setMaxSpeedTest(float value) 65 68 { SpaceShip::instance_s->setMaxSpeed(value); } 66 69 67 bool mouseMoved(const OIS::MouseEvent &e); 68 bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id); 69 bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id); 70 bool mouseHeld(const OIS::MouseEvent &e, OIS::MouseButtonID id) { return true; } 70 bool mouseButtonPressed (const MouseState& state, MouseButton::Enum id); 71 bool mouseButtonReleased(const MouseState& state, MouseButton::Enum id); 72 bool mouseButtonHeld (const MouseState& state, MouseButton::Enum id) { return true; } 73 bool mouseMoved (const MouseState& state); 74 bool mouseScrolled (const MouseState& state) { return true; } 71 75 72 76 73 77 private: 78 void createCamera(); 74 79 static SpaceShip* instance_s; 75 80 … … 81 86 82 87 Ogre::SceneNode* camNode_; 88 Camera* cam_; 89 std::string camName_; 90 83 91 84 92 ParticleInterface* tt_; … … 117 125 118 126 float emitterRate_; 127 bool server_; 119 128 }; 120 129 } -
code/trunk/src/orxonox/objects/WorldEntity.cc
r1209 r1293 45 45 unsigned int WorldEntity::worldEntityCounter_s = 0; 46 46 47 WorldEntity::WorldEntity() 47 WorldEntity::WorldEntity() : 48 velocity_ (0, 0, 0), 49 acceleration_(0, 0, 0), 50 rotationAxis_(0, 1, 0), 51 rotationRate_(0), 52 momentum_ (0), 53 node_ (0), 54 bStatic_ (true) 48 55 { 49 56 RegisterObject(WorldEntity); 50 51 //create();52 53 this->bStatic_ = true;54 this->velocity_ = Vector3(0, 0, 0);55 this->acceleration_ = Vector3(0, 0, 0);56 this->rotationAxis_ = Vector3(0, 1, 0);57 this->rotationRate_ = 0;58 this->momentum_ = 0;59 57 60 58 if (GraphicsEngine::getSingleton().getSceneManager()) … … 67 65 registerAllVariables(); 68 66 } 69 else70 {71 this->node_ = 0;72 }73 67 } 68 74 69 75 70 WorldEntity::~WorldEntity() 76 71 { 72 // just to make sure we clean out all scene nodes 73 if(this->getNode()) 74 this->getNode()->removeAndDestroyAllChildren(); 77 75 } 78 76 … … 81 79 if (!this->bStatic_) 82 80 { 81 // COUT(4) << "acceleration: " << this->acceleration_ << " velocity: " << this->velocity_ << std::endl; 83 82 this->velocity_ += (dt * this->acceleration_); 84 83 this->translate(dt * this->velocity_, Ogre::Node::TS_LOCAL); … … 94 93 BaseObject::loadParams(xmlElem); 95 94 create(); 96 /*97 if (xmlElem->Attribute("position"))98 {99 std::vector<std::string> pos = tokenize(xmlElem->Attribute("position"),",");100 float x, y, z;101 String2Number<float>(x, pos[0]);102 String2Number<float>(y, pos[1]);103 String2Number<float>(z, pos[2]);104 this->setPosition(x, y, z);105 }106 107 if (xmlElem->Attribute("direction"))108 {109 std::vector<std::string> pos = tokenize(xmlElem->Attribute("direction"),",");110 float x, y, z;111 String2Number<float>(x, pos[0]);112 String2Number<float>(y, pos[1]);113 String2Number<float>(z, pos[2]);114 this->setDirection(x, y, z);115 }116 117 if (xmlElem->Attribute("yaw") || xmlElem->Attribute("pitch") || xmlElem->Attribute("roll"))118 {119 float yaw = 0.0, pitch = 0.0, roll = 0.0;120 if (xmlElem->Attribute("yaw"))121 String2Number<float>(yaw,xmlElem->Attribute("yaw"));122 123 if (xmlElem->Attribute("pitch"))124 String2Number<float>(pitch,xmlElem->Attribute("pitch"));125 126 if (xmlElem->Attribute("roll"))127 String2Number<float>(roll,xmlElem->Attribute("roll"));128 129 this->yaw(Degree(yaw));130 this->pitch(Degree(pitch));131 this->roll(Degree(roll));132 }133 134 if (xmlElem->Attribute("scale"))135 {136 std::string scaleStr = xmlElem->Attribute("scale");137 float scale;138 String2Number<float>(scale, scaleStr);139 this->setScale(scale);140 }141 142 if (xmlElem->Attribute("rotationAxis"))143 {144 std::vector<std::string> pos = tokenize(xmlElem->Attribute("rotationAxis"),",");145 float x, y, z;146 String2Number<float>(x, pos[0]);147 String2Number<float>(y, pos[1]);148 String2Number<float>(z, pos[2]);149 this->setRotationAxis(x, y, z);150 }151 152 if (xmlElem->Attribute("rotationRate"))153 {154 float rotationRate;155 String2Number<float>(rotationRate, xmlElem->Attribute("rotationRate"));156 this->setRotationRate(Degree(rotationRate));157 if (rotationRate != 0)158 this->setStatic(false);159 }160 161 create();162 */163 95 } 96 164 97 165 98 void WorldEntity::setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll) … … 188 121 189 122 XMLPortObject(WorldEntity, WorldEntity, "attached", attachWorldEntity, getAttachedWorldEntity, xmlelement, mode, false, true); 123 124 WorldEntity::create(); 190 125 } 191 126 … … 194 129 { 195 130 // register coordinates 196 registerVar( (void*) &(this->getPosition().x), sizeof(this->getPosition().x), network::DATA );197 registerVar( (void*) &(this->getPosition().y), sizeof(this->getPosition().y), network::DATA );198 registerVar( (void*) &(this->getPosition().z), sizeof(this->getPosition().z), network::DATA );131 registerVar( (void*) &(this->getPosition().x), sizeof(this->getPosition().x), network::DATA, 0x3); 132 registerVar( (void*) &(this->getPosition().y), sizeof(this->getPosition().y), network::DATA, 0x3); 133 registerVar( (void*) &(this->getPosition().z), sizeof(this->getPosition().z), network::DATA, 0x3); 199 134 // register orientation 200 registerVar( (void*) &(this->getOrientation().w), sizeof(this->getOrientation().w), network::DATA); 201 registerVar( (void*) &(this->getOrientation().x), sizeof(this->getOrientation().x), network::DATA); 202 registerVar( (void*) &(this->getOrientation().y), sizeof(this->getOrientation().y), network::DATA); 203 registerVar( (void*) &(this->getOrientation().z), sizeof(this->getOrientation().z), network::DATA); 204 // not needed at the moment, because we don't have prediction yet 135 registerVar( (void*) &(this->getOrientation().w), sizeof(this->getOrientation().w), network::DATA, 0x3); 136 registerVar( (void*) &(this->getOrientation().x), sizeof(this->getOrientation().x), network::DATA, 0x3); 137 registerVar( (void*) &(this->getOrientation().y), sizeof(this->getOrientation().y), network::DATA, 0x3); 138 registerVar( (void*) &(this->getOrientation().z), sizeof(this->getOrientation().z), network::DATA, 0x3); 205 139 // register velocity_ 206 registerVar( (void*) &(this->getVelocity().x), sizeof(this->getVelocity().x), network::DATA); 207 registerVar( (void*) &(this->getVelocity().y), sizeof(this->getVelocity().y), network::DATA); 208 registerVar( (void*) &(this->getVelocity().z), sizeof(this->getVelocity().z), network::DATA); 209 // register rotationAxis/rate 210 registerVar( (void*) &(this->getRotationRate()), sizeof(this->getRotationRate()), network::DATA); 211 registerVar( (void*) &(this->getRotationAxis().x), sizeof(this->getRotationAxis().x), network::DATA); 212 registerVar( (void*) &(this->getRotationAxis().y), sizeof(this->getRotationAxis().y), network::DATA); 213 registerVar( (void*) &(this->getRotationAxis().z), sizeof(this->getRotationAxis().z), network::DATA); 140 // registerVar( (void*) &(this->getVelocity().x), sizeof(this->getVelocity().x), network::DATA, 0x3); 141 // registerVar( (void*) &(this->getVelocity().y), sizeof(this->getVelocity().y), network::DATA, 0x3); 142 // registerVar( (void*) &(this->getVelocity().z), sizeof(this->getVelocity().z), network::DATA, 0x3); 143 // // register rotationAxis/rate 144 // registerVar( (void*) &(this->getRotationRate()), sizeof(this->getRotationRate()), network::DATA, 0x3); 145 // registerVar( (void*) &(this->getRotationAxis().x), sizeof(this->getRotationAxis().x), network::DATA, 0x3); 146 // registerVar( (void*) &(this->getRotationAxis().y), sizeof(this->getRotationAxis().y), network::DATA, 0x3); 147 // registerVar( (void*) &(this->getRotationAxis().z), sizeof(this->getRotationAxis().z), network::DATA, 0x3); 148 // register scale of node 149 registerVar( (void*) &(this->getScale().x), sizeof(this->getScale().x), network::DATA, 0x3); 150 registerVar( (void*) &(this->getScale().y), sizeof(this->getScale().y), network::DATA, 0x3); 151 registerVar( (void*) &(this->getScale().z), sizeof(this->getScale().z), network::DATA, 0x3); 152 //register staticity 153 registerVar( (void*) &(this->bStatic_), sizeof(this->bStatic_), network::DATA, 0x3); 154 //register acceleration 155 // register velocity_ 156 // registerVar( (void*) &(this->getAcceleration().x), sizeof(this->getAcceleration().x), network::DATA, 0x3); 157 // registerVar( (void*) &(this->getAcceleration().y), sizeof(this->getAcceleration().y), network::DATA, 0x3); 158 // registerVar( (void*) &(this->getAcceleration().z), sizeof(this->getAcceleration().z), network::DATA, 0x3); 214 159 } 215 160 -
code/trunk/src/orxonox/particle/ParticleInterface.cc
r1039 r1293 63 63 ParticleInterface::~ParticleInterface(void) 64 64 { 65 while(particleSystem_->getNumEmitters()>0) 66 particleSystem_->removeEmitter(particleSystem_->getNumEmitters()-1); 65 67 sceneManager_->destroyParticleSystem(particleSystem_); 66 68 } -
code/trunk/src/orxonox/tools/Timer.cc
r1063 r1293 68 68 TimerBase::TimerBase() 69 69 { 70 RegisterRootObject(TimerBase);71 72 70 this->executor_ = 0; 73 71 this->interval_ = 0; … … 76 74 77 75 this->time_ = 0; 76 77 RegisterRootObject(TimerBase); 78 78 } 79 79 … … 83 83 TimerBase::~TimerBase() 84 84 { 85 delete this->executor_; 85 if (this->executor_) 86 delete this->executor_; 86 87 } 87 88
Note: See TracChangeset
for help on using the changeset viewer.