- Timestamp:
- May 19, 2011, 4:01:34 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/portals2/src/modules/portals/PortalEndPoint.cc
r8466 r8511 14 14 std::map<unsigned int, PortalEndPoint *> PortalEndPoint::idMap_s; 15 15 16 PortalEndPoint::PortalEndPoint(BaseObject* creator) : StaticEntity(creator), id_(0), trigger_(new DistanceMultiTrigger(this)) 16 PortalEndPoint::PortalEndPoint(BaseObject* creator) : StaticEntity(creator), id_(0), trigger_(new DistanceMultiTrigger(this)), reenterDelay_(0) 17 17 { 18 18 RegisterObject(PortalEndPoint); … … 32 32 XMLPortParam(PortalEndPoint, "id", setID, getID, xmlelement, mode); 33 33 XMLPortParam(PortalEndPoint, "design", setTemplate, getTemplate, xmlelement, mode); 34 XMLPortParamExtern(PortalEndPoint, DistanceMultiTrigger, this->trigger_, "distance", setDistance, getDistance, xmlelement, mode).defaultValues("50"); 34 XMLPortParam(PortalEndPoint, "reenterDelay", setReenterDelay, getReenterDelay, xmlelement, mode); 35 XMLPortParamExtern(PortalEndPoint, DistanceMultiTrigger, this->trigger_, "distance", setDistance, getDistance, xmlelement, mode); 35 36 XMLPortParamLoadOnly(PortalEndPoint, "target", setTarget, xmlelement, mode).defaultValues("Pawn"); 36 37 … … 63 64 if(originatingTrigger == 0) 64 65 { 65 COUT(1) << "originator no DistanceMultiTrigger\n" << std::endl;66 // COUT(1) << "originator no DistanceMultiTrigger\n" << std::endl; 66 67 return true; 67 68 } … … 73 74 if(bTriggered) 74 75 { 75 if(this-> recentlyJumpedOut_.find(entity) == this->recentlyJumpedOut_.end()) // only enter the portal if not just jumped out of it76 if(this->letsEnter(entity)) // only enter the portal if not just (this very moment) jumped out of it, or if the reenterDelay expired 76 77 { 77 78 PortalLink::use(entity, this); … … 86 87 } 87 88 89 bool PortalEndPoint::letsEnter(MobileEntity* entity) 90 { 91 // not allowed to enter if reenterDelay hasn't expired yet 92 std::map<MobileEntity *, time_t>::const_iterator time = this->jumpOutTimes_.find(entity); 93 if(time != this->jumpOutTimes_.end() && std::difftime(std::time(0),time->second) < this->reenterDelay_) 94 return false; 95 96 // not allowed to enter if jumped out of this portal and not left its activation radius yet 97 std::set<MobileEntity *>::const_iterator recent = this->recentlyJumpedOut_.find(entity); 98 if(recent != this->recentlyJumpedOut_.end()) 99 return false; 100 101 return true; 102 } 103 88 104 void PortalEndPoint::jumpOut(MobileEntity* entity) 89 105 { 106 this->jumpOutTimes_[entity] = std::time(0); 90 107 this->recentlyJumpedOut_.insert(entity); 91 108
Note: See TracChangeset
for help on using the changeset viewer.