Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 17, 2010, 1:22:26 PM (14 years ago)
Author:
dafrick
Message:

Added DistanceTriggerBeacon, which is a device which can be attached to objects to trigger a DistanceTrigger (both the (single) DistanceTrigger and DistanceMultiTrigger) based on the name of the DistanceTri$
Also some minor adjustements in QuestEffectBeacon: Removed some output and adjusted the outputlevel of some other output.
And started working on PickupInventory again (though no significant changes yet).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/modules/objects/triggers/DistanceTrigger.cc

    r6417 r6906  
    3232#include "core/XMLPort.h"
    3333#include "worldentities/pawns/Pawn.h"
     34#include "DistanceTriggerBeacon.h"
    3435
    3536namespace orxonox
     
    4344    this->distance_ = 100;
    4445    this->targetMask_.exclude(Class(BaseObject));
     46    this->targetName_ = BLANKSTRING;
     47    this->singleTargetMode_ = false;
    4548    this->setForPlayer(false); //!< Normally hasn't just players as targets.
    4649  }
     
    5558
    5659    XMLPortParam(DistanceTrigger, "distance", setDistance, getDistance, xmlelement, mode).defaultValues(100.0f);
    57     XMLPortParamLoadOnly(DistanceTrigger, "target", addTargets, xmlelement, mode).defaultValues("ControllableEntity");
     60    XMLPortParamLoadOnly(DistanceTrigger, "target", addTargets, xmlelement, mode).defaultValues("Pawn");
     61    XMLPortParam(DistanceTrigger, "targetname", setTargetName, getTargetName, xmlelement, mode);
    5862  }
    5963
     
    8488
    8589    //! Checks whether the target is (or is derived from) a ControllableEntity.
    86     Identifier* controllableEntityId = Class(ControllableEntity);
    87     if(targetId->isA(controllableEntityId))
     90    Identifier* pawnId = Class(Pawn);
     91    Identifier* distanceTriggerBeaconId = Class(DistanceTriggerBeacon);
     92    if(targetId->isA(pawnId) || targetId->isA(distanceTriggerBeaconId))
    8893    {
    8994      this->setForPlayer(true);
     
    124129        continue;
    125130
     131      if(this->singleTargetMode_)
     132      {
     133        if(!(*it)->isA(ClassIdentifier<DistanceTriggerBeacon>::getIdentifier()))
     134          this->singleTargetMode_ = false;
     135        else if(entity->getName().compare(this->targetName_) != 0)
     136          continue;
     137      }
     138     
    126139      Vector3 distanceVec = entity->getWorldPosition() - this->getWorldPosition();
    127140      if (distanceVec.length() < this->distance_)
     
    131144        if(this->isForPlayer())
    132145        {
     146
     147          if(this->singleTargetMode_)
     148            entity = entity->getParent();
     149
    133150          Pawn* player = orxonox_cast<Pawn*>(entity);
    134151          this->setTriggeringPlayer(player);
Note: See TracChangeset for help on using the changeset viewer.