Changeset 7601 for code/trunk/src/modules/objects/triggers/Trigger.cc
- Timestamp:
- Oct 30, 2010, 1:54:49 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/modules/objects/triggers/Trigger.cc
r7284 r7601 26 26 * 27 27 */ 28 29 /** 30 @file Trigger.cc 31 @brief Implementation of the Trigger class. 32 @ingroup NormalTrigger 33 */ 28 34 29 35 #include "Trigger.h" … … 42 48 CreateFactory(Trigger); 43 49 44 Trigger::Trigger(BaseObject* creator) : StaticEntity(creator)50 Trigger::Trigger(BaseObject* creator) : TriggerBase(creator) 45 51 { 46 52 RegisterObject(Trigger); 47 53 48 this->mode_ = TriggerMode::EventTriggerAND;49 50 this->bFirstTick_ = true;51 54 this->bActive_ = false; 52 55 this->bTriggered_ = false; 53 56 this->latestState_ = 0x0; 54 57 55 this->bInvertMode_ = false;56 this->bSwitch_ = false;57 this->bStayActive_ = false;58 this->delay_ = 0.0f;59 58 this->remainingTime_ = 0.0f; 60 59 this->timeSinceLastEvent_ = 0.0f; 61 this->remainingActivations_ = -1;62 60 63 61 // this->bUpdating_ = false; … … 82 80 { 83 81 SUPER(Trigger, XMLPort, xmlelement, mode); 84 85 XMLPortParam(Trigger, "delay", setDelay, getDelay, xmlelement, mode).defaultValues(0.0f);86 XMLPortParam(Trigger, "switch", setSwitch, getSwitch, xmlelement, mode).defaultValues(false);87 XMLPortParam(Trigger, "stayactive", setStayActive, getStayActive, xmlelement, mode).defaultValues(false);88 XMLPortParam(Trigger, "activations", setActivations, getActivations, xmlelement, mode).defaultValues(-1);89 XMLPortParam(Trigger, "invert", setInvert, getInvert, xmlelement, mode).defaultValues(false);90 XMLPortParamTemplate(Trigger, "mode", setMode, getModeString, xmlelement, mode, const std::string&).defaultValues("or");91 92 XMLPortObject(Trigger, Trigger, "", addTrigger, getTrigger, xmlelement, mode);93 82 } 94 83 95 84 void Trigger::tick(float dt) 96 85 { 97 if 86 if(this->bFirstTick_) 98 87 { 99 88 this->bFirstTick_ = false; … … 107 96 SUPER(Trigger, tick, dt); 108 97 109 bool newTriggered = this->isTriggered() ^ this-> bInvertMode_;98 bool newTriggered = this->isTriggered() ^ this->getInvert(); 110 99 111 100 // check if new triggering event is really new … … 121 110 { 122 111 this->latestState_ &= 0xFE; // set trigger bit to 0 123 if (!this-> bSwitch_)112 if (!this->getSwitch()) 124 113 this->switchState(); 125 114 } … … 145 134 this->remainingTime_ = this->stateChanges_.front().first; 146 135 else 147 this->timeSinceLastEvent_ = this-> delay_;136 this->timeSinceLastEvent_ = this->getDelay(); 148 137 } 149 138 … … 197 186 bool Trigger::checkAnd() 198 187 { 199 std::set<Trigger *>::iterator it;188 std::set<TriggerBase*>::iterator it; 200 189 for(it = this->children_.begin(); it != this->children_.end(); ++it) 201 190 { … … 208 197 bool Trigger::checkOr() 209 198 { 210 std::set<Trigger *>::iterator it;199 std::set<TriggerBase*>::iterator it; 211 200 for(it = this->children_.begin(); it != this->children_.end(); ++it) 212 201 { … … 219 208 bool Trigger::checkXor() 220 209 { 221 std::set<Trigger *>::iterator it;210 std::set<TriggerBase*>::iterator it; 222 211 bool test = false; 223 212 for(it = this->children_.begin(); it != this->children_.end(); ++it) … … 233 222 bool Trigger::switchState() 234 223 { 235 if (( (this->latestState_ & 2) && this-> bStayActive_&& (this->remainingActivations_ <= 0))236 || (!(this->latestState_ & 2) && (this->remainingActivations_ == 0)))224 if (( (this->latestState_ & 2) && this->getStayActive() && (this->remainingActivations_ <= 0)) 225 || (!(this->latestState_ & 2) && (this->remainingActivations_ == 0))) 237 226 return false; 238 227 else … … 261 250 } 262 251 263 void Trigger::setDelay(float delay) 264 { 265 this->delay_ = delay; 266 this->timeSinceLastEvent_ = delay; 267 } 268 269 void Trigger::setMode(const std::string& modeName) 270 { 271 if (modeName == "and") 272 this->setMode(TriggerMode::EventTriggerAND); 273 else if (modeName == "or") 274 this->setMode(TriggerMode::EventTriggerOR); 275 else if (modeName == "xor") 276 this->setMode(TriggerMode::EventTriggerXOR); 277 } 278 279 std::string Trigger::getModeString() const 280 { 281 if (this->mode_ == TriggerMode::EventTriggerAND) 282 return "and"; 283 else if (this->mode_ == TriggerMode::EventTriggerOR) 284 return "or"; 285 else if (this->mode_ == TriggerMode::EventTriggerXOR) 286 return "xor"; 287 else 288 return "and"; 289 } 290 291 void Trigger::addTrigger(Trigger* trigger) 292 { 293 if (this != trigger) 294 this->children_.insert(trigger); 295 } 296 297 const Trigger* Trigger::getTrigger(unsigned int index) const 298 { 299 if (this->children_.size() <= index) 300 return NULL; 301 302 std::set<Trigger*>::const_iterator it; 303 it = this->children_.begin(); 304 305 for (unsigned int i = 0; i != index; ++i) 306 ++it; 307 308 return (*it); 252 void Trigger::delayChanged(void) 253 { 254 this->timeSinceLastEvent_ = this->getDelay(); 309 255 } 310 256
Note: See TracChangeset
for help on using the changeset viewer.