[Orxonox-commit 3512] r8198 - code/branches/portals/src/orxonox/worldentities

anbueche at orxonox.net anbueche at orxonox.net
Wed Apr 6 23:06:46 CEST 2011


Author: anbueche
Date: 2011-04-06 23:06:45 +0200 (Wed, 06 Apr 2011)
New Revision: 8198

Modified:
   code/branches/portals/src/orxonox/worldentities/PortalEndPoint.cc
   code/branches/portals/src/orxonox/worldentities/PortalEndPoint.h
   code/branches/portals/src/orxonox/worldentities/PortalLink.cc
   code/branches/portals/src/orxonox/worldentities/PortalLink.h
Log:
First steps to use of Triggers and Events

Modified: code/branches/portals/src/orxonox/worldentities/PortalEndPoint.cc
===================================================================
--- code/branches/portals/src/orxonox/worldentities/PortalEndPoint.cc	2011-04-06 14:54:07 UTC (rev 8197)
+++ code/branches/portals/src/orxonox/worldentities/PortalEndPoint.cc	2011-04-06 21:06:45 UTC (rev 8198)
@@ -10,8 +10,6 @@
     PortalEndPoint::PortalEndPoint(BaseObject* creator) : StaticEntity(creator), id_(0), material_(""), billboard_(0)
     {
         RegisterObject(PortalEndPoint);
-        trigger_.setDistance(10);
-        trigger_.setStayActive(true);
     }
     
     PortalEndPoint::~PortalEndPoint()
@@ -28,7 +26,29 @@
         
         if(mode == XMLPort::LoadObject)
         {
-            idMap_s[this->id_] = this;
+            PortalEndPoint::idMap_s[this->id_] = this;
         }
     }
+
+    void PortalEndPoint::tick(float dt)
+    {
+        SUPER(PortalEndPoint, tick);
+    }
+
+    void PortalEndPoint::jumpOut(WorldEntity* entity)
+    {
+        this->recentlyJumpedOut_.insert(entity);
+        entity->setPosition(this->getPosition());
+    }
+
+    bool PortalEndPoint::hasRecentlyJumpedOut(WorldEntity* entity)
+    {
+        if(this->recentlyJumpedOut_.find(entity) == this->recentlyJumpedOut_.end())
+        {
+            return false;
+        }
+        else
+            return true;
+    }
+
 }

Modified: code/branches/portals/src/orxonox/worldentities/PortalEndPoint.h
===================================================================
--- code/branches/portals/src/orxonox/worldentities/PortalEndPoint.h	2011-04-06 14:54:07 UTC (rev 8197)
+++ code/branches/portals/src/orxonox/worldentities/PortalEndPoint.h	2011-04-06 21:06:45 UTC (rev 8198)
@@ -7,19 +7,18 @@
 
 #include "StaticEntity.h"
 #include "graphics/Billboard.h"
-#include "objects/triggers/DistanceMultiTrigger.h"
-#include "tools/interfaces/Tickable.h"
+#include "../../modules/objects/triggers/DistanceMultiTrigger.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport PortalEndPoint : public StaticEntity
+    class _OrxonoxExport PortalEndPoint : public DistanceMultiTrigger
     {
         public:
             PortalEndPoint(BaseObject* creator);
             virtual ~PortalEndPoint();
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
             //virtual void tick(float dt);
-            static std::map<unsigned int, PortalEndPoint *> idMap_s;
+            static std::map<unsigned int, PortalEndPoint *> idMap_s; //!< maps integer id values to portalendpoints
             inline void setID(unsigned int id)
             {
                 this->id_ = id;
@@ -29,13 +28,14 @@
             {
                 return this->id_;
             }
+            void jumpOut(WorldEntity * entity); //!< relocate an entity to the position of the endpoint and add it to the set of recentlyPortedOut entities
+            void tick(float dt);
+            bool hasRecentlyJumpedOut(WorldEntity * entity); //!< check if a certain entity recently jumped out of this endpoint
         protected:
         private:
             unsigned int id_;
-            std::set<WorldEntity *> recentlyJumpedOut_;
-            std::string material_;
+            std::set<WorldEntity *> recentlyJumpedOut_; //!< Entities which recently jumped out of this EndPoint, hence they shouldn't be pulled in again if the endpoint is the beginning of a link
             Billboard billboard_;
-            DistanceMultiTrigger trigger_;
     };
 
 }

Modified: code/branches/portals/src/orxonox/worldentities/PortalLink.cc
===================================================================
--- code/branches/portals/src/orxonox/worldentities/PortalLink.cc	2011-04-06 14:54:07 UTC (rev 8197)
+++ code/branches/portals/src/orxonox/worldentities/PortalLink.cc	2011-04-06 21:06:45 UTC (rev 8198)
@@ -1,5 +1,6 @@
 #include "PortalLink.h"
 #include "core/XMLPort.h"
+#include "objects/triggers/MultiTriggerContainer.h"
 
 namespace orxonox
 {
@@ -28,12 +29,30 @@
         }
     }
     
-    void PortalLink::use(WorldEntity * entity)
+    void PortalLink::tick(float dt)
     {
-        
+        SUPER(PortalLink, tick)
     }
-    void PortalLink::tick(float dt)
+    
+    void PortalLink::processEvent(Event& event)
     {
-        
+        SUPER(PortalLink, processEvent);
+        if(!event.activate_)
+        {
+            return;
+        }
+        MultiTriggerContainer * origin = dynamic_cast<MultiTriggerContainer *>(event.originator_);
+        if(!origin)
+        {
+            return;
+        }
+        PortalEndPoint * eventFrom = dynamic_cast<PortalEndPoint *>(origin->getOriginator());
+        WorldEntity * eventEntity = dynamic_cast<WorldEntity *>(origin->getData());
+        if(eventFrom != this->from_ || !eventEntity || eventFrom->hasRecentlyJumpedOut(eventEntity) == true)
+        {
+            return;
+        }
+        to_->jumpOut(entity);
     }
+
 }
\ No newline at end of file

Modified: code/branches/portals/src/orxonox/worldentities/PortalLink.h
===================================================================
--- code/branches/portals/src/orxonox/worldentities/PortalLink.h	2011-04-06 14:54:07 UTC (rev 8197)
+++ code/branches/portals/src/orxonox/worldentities/PortalLink.h	2011-04-06 21:06:45 UTC (rev 8198)
@@ -5,12 +5,13 @@
 #include "tools/interfaces/Tickable.h"
 #include "core/BaseObject.h"
 #include "PortalEndPoint.h"
+#include "objects/eventsystem/EventListener.h"
 
 #include <set>
 
 namespace orxonox
 {
-    class _OrxonoxExport PortalLink : public BaseObject
+    class _OrxonoxExport PortalLink : public EventListener
     {
         public:
             PortalLink(BaseObject* creator);
@@ -35,6 +36,7 @@
                 return this->toID_;
             }
             void use(WorldEntity * entity);
+            virtual void processEvent(Event& event);
         protected:
         private:
             unsigned int fromID_;
@@ -43,6 +45,7 @@
             PortalEndPoint* to_;
             float activationRadius_;
             std::set<WorldEntity *> recentlyPorted;
+            ObjectList<WorldEntity>::iterator it_;
             bool isNowPortable(WorldEntity * ent);
     };
 




More information about the Orxonox-commit mailing list