Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Oct 30, 2008, 11:58:31 PM (16 years ago)
Author:
landauf
Message:

fixed a bug in the event system
fixed a bug in Trigger and tweaked some features

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc

    r2029 r2069  
    5454
    5555    XMLPortParam(DistanceTrigger, "distance", setDistance, getDistance, xmlelement, mode).defaultValues(100.0f);
    56     XMLPortParamLoadOnly(DistanceTrigger, "target", addTargets, xmlelement, mode);
     56    XMLPortParamLoadOnly(DistanceTrigger, "target", addTargets, xmlelement, mode).defaultValues("ControllableEntity");
    5757  }
    5858
     
    8181  {
    8282    Identifier* targetId = ClassByString(targets);
    83     targetMask_.include(targetId);
     83    if (!targetId)
     84        return;
     85
     86    this->targetMask_.include(targetId);
     87
    8488    // trigger shouldn't react on itself or other triggers
    85     targetMask_.exclude(Class(Trigger), true);
     89    this->targetMask_.exclude(Class(Trigger), true);
    8690
     91    // we only want WorldEntities
     92    ClassTreeMask WEMask;
     93    WEMask.include(Class(WorldEntity));
     94    this->targetMask_ *= WEMask;
    8795  }
    8896
     
    9098  {
    9199    Identifier* targetId = ClassByString(targets);
    92     targetMask_.exclude(targetId);
     100    this->targetMask_.exclude(targetId);
    93101  }
    94102
    95103  bool DistanceTrigger::checkDistance()
    96104  {
    97     // Iterate through all WorldEntities
    98     for (Iterator<WorldEntity> it = ObjectList<WorldEntity>::begin(); it; ++it)
     105    // Iterate through all objects
     106    for (ClassTreeMaskObjectIterator it = this->targetMask_.begin(); it != this->targetMask_.end(); ++it)
    99107    {
    100       // check if WorldEntity is a target
    101       if (targetMask_.isIncluded(it->getIdentifier()))
    102       {
    103         Vector3 distanceVec = it->getNode()->getWorldPosition() - this->getNode()->getWorldPosition();
    104         if (distanceVec.length() < this->distance_)
    105           return true;
    106       }
     108      WorldEntity* entity = dynamic_cast<WorldEntity*>(*it);
     109      if (!entity)
     110        continue;
     111
     112      Vector3 distanceVec = entity->getWorldPosition() - this->getWorldPosition();
     113      if (distanceVec.length() < this->distance_)
     114        return true;
    107115    }
    108116    return false;
Note: See TracChangeset for help on using the changeset viewer.