Changeset 5935 for code/branches/pickup/src/libraries/core/Event.cc
- Timestamp:
- Oct 13, 2009, 5:05:17 PM (15 years ago)
- Location:
- code/branches/pickup
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/pickup
- Property svn:mergeinfo changed
-
code/branches/pickup/src/libraries/core/Event.cc
r5781 r5935 30 30 31 31 #include "BaseObject.h" 32 #include " Executor.h"32 #include "Identifier.h" 33 33 34 34 namespace orxonox 35 35 { 36 EventContainer::~EventContainer() 36 /** 37 @brief Destructor: Deletes the functor of the event state. 38 */ 39 EventState::~EventState() 37 40 { 38 delete this->eventfunction_; 41 if (this->statefunction_) 42 delete this->statefunction_; 39 43 } 40 44 41 void EventContainer::process(BaseObject* object, const Event& event) 45 /** 46 @brief Processes an event (calls the set-function if the necessary conditions are met). 47 48 @param event The fired event 49 @param object The object whose state is affected by the event (only needed for debug output) 50 */ 51 void EventState::process(const Event& event, BaseObject* object) 42 52 { 43 if (this->b Active_)53 if (this->bProcessingEvent_) 44 54 { 45 COUT(2) << "Warning: Detected Event loop in section \"" << this->eventname_ << "\" of object \"" << object->getName() << "\" and fired by \"" << event.originator_->getName() << "\"" << std::endl;55 COUT(2) << "Warning: Detected Event loop in section \"" << event.statename_ << "\" of object \"" << object->getName() << "\" and fired by \"" << event.originator_->getName() << "\"" << std::endl; 46 56 return; 47 57 } 48 58 49 this->b Active_ = true;59 this->bProcessingEvent_ = true; 50 60 51 if (this->eventname_ == event.sectionname_) 61 // check if the originator is an instance of the requested class 62 if (event.originator_->isA(this->subclass_)) 52 63 { 53 if (event.originator_->isA(this->subclass_)) 64 // actualize the activationcounter 65 if (event.activate_) 66 ++this->activeEvents_; 67 else 54 68 { 55 if (event.activate_) 56 ++this->activeEvents_; 57 else 69 --this->activeEvents_; 70 71 if (this->activeEvents_ < 0) 72 this->activeEvents_ = 0; 73 } 74 75 if (this->statefunction_->getParamCount() == 0 && event.activate_) 76 { 77 // if the eventfunction doesn't have a state, just call it whenever an activation-event comes in 78 (*this->statefunction_)(); 79 } 80 else if ((this->activeEvents_ == 1 && event.activate_) || (this->activeEvents_ == 0 && !event.activate_)) 81 { 82 // if the eventfunction needs a state, we just call the function if the state changed from 0 to 1 (state = true) or from 1 to 0 (state = false) [but not if activeEvents_ is > 1] 83 if (this->statefunction_->getParamCount() == 1) 58 84 { 59 --this->activeEvents_; 60 61 if (this->activeEvents_ < 0) 62 this->activeEvents_ = 0; 85 // one argument: just the eventstate 86 (*this->statefunction_)(this->activeEvents_); 63 87 } 64 65 if (this->eventfunction_->getParamCount() == 0 && event.activate_) 66 (*this->eventfunction_)(); 67 else if ((this->activeEvents_ == 1 && event.activate_) || (this->activeEvents_ == 0 && !event.activate_)) 88 else if (this->statefunction_->getParamCount() >= 2) 68 89 { 69 if (this->eventfunction_->getParamCount() == 1) 70 (*this->eventfunction_)(this->activeEvents_); 71 else if (this->eventfunction_->getParamCount() >= 2 && event.castedOriginator_) 72 (*this->eventfunction_)(this->activeEvents_, event.castedOriginator_); 90 // two arguments: the eventstate and the originator 91 if (this->subclass_->isExactlyA(ClassIdentifier<BaseObject>::getIdentifier())) 92 { 93 // if the subclass is BaseObject, we don't have to cast the pointer 94 (*this->statefunction_)(this->activeEvents_, event.originator_); 95 } 96 else 97 { 98 // else cast the pointer to the desired class 99 void* castedOriginator = event.originator_->getDerivedPointer(this->subclass_->getClassID()); 100 (*this->statefunction_)(this->activeEvents_, castedOriginator); 101 } 73 102 } 74 103 } 75 104 } 76 105 77 this->b Active_ = false;106 this->bProcessingEvent_ = false; 78 107 } 79 108 }
Note: See TracChangeset
for help on using the changeset viewer.