Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 14, 2011, 4:33:33 PM (13 years ago)
Author:
anbueche
Message:

portals work pretty good

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/portals/src/modules/portals/PortalLink.cc

    r8200 r8243  
    22#include "core/XMLPort.h"
    33#include "objects/triggers/MultiTriggerContainer.h"
     4#include "worldentities/MobileEntity.h"
    45
    56namespace orxonox
    67{
    78    CreateFactory(PortalLink);
     9
     10    std::map<PortalEndPoint *, PortalEndPoint *> PortalLink::links_s;
    811   
    9     PortalLink::PortalLink(BaseObject* creator) : EventListener(creator), fromID_(0), toID_(0), from_(0), to_(0), activationRadius_(20)
     12    PortalLink::PortalLink(BaseObject* creator) : BaseObject(creator), fromID_(0), toID_(0), from_(0), to_(0)
    1013    {
    1114        RegisterObject(PortalLink);
     
    2427        if(mode == XMLPort::LoadObject)
    2528        {
    26             this->from_ = PortalEndPoint::idMap_s[this->fromID_];
    27             this->to_   = PortalEndPoint::idMap_s[this->toID_];
    28             recentlyPorted.clear();
     29            PortalEndPoint * from = PortalEndPoint::idMap_s[this->fromID_];
     30            PortalEndPoint * to   = PortalEndPoint::idMap_s[this->toID_];
     31            PortalLink::links_s[from] = to;
    2932        }
    3033    }
     
    3437        SUPER(PortalLink, tick, dt);
    3538    }
    36    
    37     void PortalLink::processEvent(Event& event)
     39
     40    void PortalLink::use(MobileEntity* entity, PortalEndPoint * entrance)
    3841    {
    39         EventListener::processEvent(event);
    40         if(!event.activate_)
     42        if(entrance == 0)
    4143        {
     44            // TODO COUT
    4245            return;
    4346        }
    44         MultiTriggerContainer * origin = dynamic_cast<MultiTriggerContainer *>(event.originator_);
    45         if(!origin)
    46         {
     47       
     48        std::map<PortalEndPoint *, PortalEndPoint *>::iterator endpoint = PortalLink::links_s.find(entrance);
     49       
     50        if(endpoint == PortalLink::links_s.end())  // entrance has no corresponding exit
    4751            return;
    48         }
    49         PortalEndPoint * eventFrom = dynamic_cast<PortalEndPoint *>(origin->getOriginator());
    50         WorldEntity * eventEntity = dynamic_cast<WorldEntity *>(origin->getData());
    51         if(eventFrom != this->from_ || !eventEntity || eventFrom->hasRecentlyJumpedOut(eventEntity) == true)
    52         {
    53             return;
    54         }
    55         to_->jumpOut(eventEntity);
     52       
     53        endpoint->second->jumpOut(entity);
    5654    }
    5755
     56
    5857}
Note: See TracChangeset for help on using the changeset viewer.