Changeset 2084 for code/branches
- Timestamp:
- Nov 1, 2008, 2:51:02 PM (16 years ago)
- Location:
- code/branches/objecthierarchy/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/objecthierarchy/src/core/CoreIncludes.h
r2034 r2084 46 46 #include "Factory.h" 47 47 #include "ClassFactory.h" 48 #include "Functor.h" 48 49 #include "util/Debug.h" 49 50 … … 128 129 orxonox::Factory::getIdentifier(networkID) 129 130 131 /** 132 @brief Registers a member function as callback when an object of 'type' is created. 133 @param 134 */ 135 #define RegisterConstructionCallback(ThisClassName, TargetClassName, FunctionName) \ 136 orxonox::ClassIdentifier<TargetClassName>::getIdentifier()->addConstructionCallback( \ 137 createFunctor(&ThisClassName::FunctionName)->setObject(this)) 138 130 139 #endif /* _CoreIncludes_H__ */ -
code/branches/objecthierarchy/src/core/Functor.h
r2019 r2084 167 167 } 168 168 169 voidsetObject(T* object)169 FunctorMember* setObject(T* object) 170 170 { 171 171 this->bConstObject_ = false; 172 172 this->object_ = object; 173 return this; 173 174 } 174 175 175 voidsetObject(const T* object)176 FunctorMember* setObject(const T* object) 176 177 { 177 178 this->bConstObject_ = true; 178 179 this->constObject_ = object; 180 return this; 179 181 } 180 182 -
code/branches/objecthierarchy/src/core/Identifier.cc
r2063 r2084 63 63 this->bHasConfigValues_ = false; 64 64 this->bHasConsoleCommands_ = false; 65 this->bHasConstructionCallback_ = false; 65 66 66 67 this->children_ = new std::set<const Identifier*>(); … … 508 509 509 510 /** 511 @brief Adds a construction callback functor that gets called every time an object is created. 512 @param functor Functor pointer to any function with no argument. 513 */ 514 void Identifier::addConstructionCallback(Functor* functor) 515 { 516 for (unsigned int i = 0; i < this->constructionCallbacks_.size(); ++i) 517 { 518 if (this->constructionCallbacks_[i] == functor) 519 return; 520 } 521 this->constructionCallbacks_.push_back(functor); 522 this->bHasConstructionCallback_ = true; 523 } 524 525 /** 526 @brief Removes a construction callback functor that gets called every time an object is created. 527 @param functor Functor pointer to any function with no argument. 528 */ 529 void Identifier::removeConstructionCallback(Functor* functor) 530 { 531 for (unsigned int i = 0; i < this->constructionCallbacks_.size(); ++i) 532 { 533 if (this->constructionCallbacks_[i] == functor) 534 { 535 this->constructionCallbacks_.erase(this->constructionCallbacks_.begin() + i); 536 } 537 } 538 if (constructionCallbacks_.empty()) 539 this->bHasConstructionCallback_ = false; 540 } 541 542 /** 510 543 @brief Lists the names of all Identifiers in a std::set<const Identifier*>. 511 544 @param out The outstream -
code/branches/objecthierarchy/src/core/Identifier.h
r2063 r2084 57 57 #include <set> 58 58 #include <map> 59 #include <vector> 59 60 #include <string> 60 61 #include <utility> … … 221 222 /** @brief Returns true if this class has at least one console command. @return True if this class has at least one console command */ 222 223 inline bool hasConsoleCommands() const { return this->bHasConsoleCommands_; } 224 /** @brief Returns true if this class has at least one construction callback Functor registered. */ 225 inline bool hasConstructionCallback() const { return this->bHasConstructionCallback_; } 223 226 224 227 /** @brief Returns true, if a branch of the class-hierarchy is being created, causing all new objects to store their parents. @return The status of the class-hierarchy creation */ … … 247 250 ConsoleCommand* getConsoleCommand(const std::string& name) const; 248 251 ConsoleCommand* getLowercaseConsoleCommand(const std::string& name) const; 252 253 void addConstructionCallback(Functor* functor); 254 void removeConstructionCallback(Functor* functor); 249 255 250 256 void initializeClassHierarchy(std::set<const Identifier*>* parents, bool bRootClass); … … 267 273 /** @brief Returns the direct children of the class the Identifier belongs to. @return The list of all direct children */ 268 274 inline std::set<const Identifier*>& getDirectChildrenIntern() const { return (*this->directChildren_); } 275 276 bool bHasConstructionCallback_; //!< True if at least one Functor is registered to get informed when an object of type T is created. 277 std::vector<Functor*> constructionCallbacks_; //!< All construction callback Functors of this class. 269 278 270 279 ObjectListBase* objects_; //!< The list of all objects of this class … … 441 450 COUT(5) << "*** ClassIdentifier: Added object to " << this->getName() << "-list." << std::endl; 442 451 object->getMetaList().add(this->objects_, this->objects_->add(new ObjectListElement<T>(object))); 452 if (this->bHasConstructionCallback_) 453 { 454 // Call all registered callbacks that a new object of type T has been created. 455 // Do NOT deliver a T* pointer here because it's way too risky (object not yet fully created). 456 for (unsigned int i = 0; i < this->constructionCallbacks_.size(); ++i) 457 (*constructionCallbacks_[i])(); 458 } 443 459 } 444 460 -
code/branches/objecthierarchy/src/network/packet/Packet.cc
r2080 r2084 214 214 delete it->second; 215 215 //packetMap_.erase(it); 216 COUT(4) << "PacketMap size: " << packetMap_.size() << std::endl; 216 217 } 217 218 -
code/branches/objecthierarchy/src/orxonox/gamestates/GSGraphics.cc
r2023 r2084 51 51 #include "core/input/KeyBinder.h" 52 52 #include "core/input/ExtendedInputState.h" 53 #include "core/Loader.h" 54 #include "core/XMLFile.h" 53 55 #include "overlays/console/InGameConsole.h" 54 56 #include "gui/GUIManager.h" 55 57 #include "tools/WindowEventListener.h" 58 #include "objects/Tickable.h" 56 59 #include "Settings.h" 57 60 … … 65 68 , renderWindow_(0) 66 69 , viewport_(0) 70 , bWindowEventListenerUpdateRequired_(false) 67 71 , inputManager_(0) 68 72 , console_(0) … … 77 81 , statisticsStartCount_(0) 78 82 , tickTime_(0) 83 , debugOverlay_(0) 79 84 { 80 85 RegisterRootObject(GSGraphics); … … 114 119 this->initialiseResources(); 115 120 116 117 // HACK: temporary: 118 //graphicsEngine_->renderWindow_ = this->renderWindow_; 119 //graphicsEngine_->root_ = this->ogreRoot_; 120 //graphicsEngine_->viewport_ = this->viewport_; 121 121 // We want to get informed whenever an object of type WindowEventListener is created 122 // in order to later update the window size. 123 bWindowEventListenerUpdateRequired_ = false; 124 RegisterConstructionCallback(GSGraphics, orxonox::WindowEventListener, requestWindowEventListenerUpdate); 125 126 // load debug overlay 127 COUT(3) << "Loading Debug Overlay..." << std::endl; 128 this->debugOverlay_ = new XMLFile(Settings::getDataPath() + "overlay/debug.oxo"); 129 Loader::open(debugOverlay_); 122 130 123 131 // Calls the InputManager which sets up the input devices. … … 166 174 //delete this->masterKeyBinder_; 167 175 delete this->inputManager_; 176 177 Loader::unload(this->debugOverlay_); 178 delete this->debugOverlay_; 168 179 169 180 // destroy render window … … 222 233 this->console_->tick(dt); 223 234 this->tickChild(time); 235 236 /*** HACK *** HACK ***/ 237 // Call the Tickable objects 238 for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; ++it) 239 it->tick(time.getDeltaTime()); 240 /*** HACK *** HACK ***/ 241 242 if (this->bWindowEventListenerUpdateRequired_) 243 { 244 // Update all WindowEventListeners for the case a new one was created. 245 this->windowResized(this->renderWindow_); 246 this->bWindowEventListenerUpdateRequired_ = false; 247 } 224 248 225 249 unsigned long long timeAfterTick = time.getRealMicroseconds(); -
code/branches/objecthierarchy/src/orxonox/gamestates/GSGraphics.h
r1891 r2084 77 77 void windowClosed (Ogre::RenderWindow* rw); 78 78 79 void requestWindowEventListenerUpdate() { this->bWindowEventListenerUpdateRequired_ = true; } 80 79 81 private: // variables 80 82 Ogre::RenderWindow* renderWindow_; //!< the current render window 81 83 Ogre::Viewport* viewport_; //!< default full size viewport 84 bool bWindowEventListenerUpdateRequired_; //!< True if a new WindowEventListener was created but not yet updated. 82 85 83 86 // managed singletons … … 97 100 unsigned long statisticsStartCount_; 98 101 unsigned int tickTime_; 102 XMLFile* debugOverlay_; 99 103 100 104 // config values -
code/branches/objecthierarchy/src/orxonox/gamestates/GSLevel.cc
r2073 r2084 163 163 void GSLevel::ticked(const Clock& time) 164 164 { 165 // Call the scene objects 166 for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; ++it) 167 it->tick(time.getDeltaTime() * this->timeFactor_); 165 // Commented by 1337: Temporarily moved to GSGraphics. 166 //// Call the scene objects 167 //for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; ++it) 168 // it->tick(time.getDeltaTime() * this->timeFactor_); 168 169 } 169 170 -
code/branches/objecthierarchy/src/orxonox/overlays/OrxonoxOverlay.cc
r2075 r2084 76 76 this->overlay_->add2D(this->background_); 77 77 78 // We'll have to get the aspect ratio manually for the first time. Afterwards windowResized() gets79 // called automatically by GSGraphics.80 this->windowAspectRatio_ = Ogre::OverlayManager::getSingleton().getViewportAspectRatio();78 // We'll have to set the aspect ratio to a default value first. 79 // GSGraphics gets informed about our construction here and can update us in the next tick. 80 this->windowAspectRatio_ = 1.0; 81 81 this->sizeCorrectionChanged(); 82 82
Note: See TracChangeset
for help on using the changeset viewer.