[Orxonox-commit 1169] r5890 - in code/branches/core5: data/levels data/levels/old src/modules/objects/eventsystem

landauf at orxonox.net landauf at orxonox.net
Tue Oct 6 05:29:40 CEST 2009


Author: landauf
Date: 2009-10-06 05:29:39 +0200 (Tue, 06 Oct 2009)
New Revision: 5890

Modified:
   code/branches/core5/data/levels/events.oxw
   code/branches/core5/data/levels/old/physicstest2.oxw
   code/branches/core5/data/levels/old/princessaeryn.oxw
   code/branches/core5/data/levels/old/sample4.oxw
   code/branches/core5/data/levels/presentation.oxw
   code/branches/core5/data/levels/presentation09b.oxw
   code/branches/core5/data/levels/princessaeryn.oxw
   code/branches/core5/src/modules/objects/eventsystem/EventTarget.cc
   code/branches/core5/src/modules/objects/eventsystem/EventTarget.h
Log:
Using target= instead of name= to define the target-object in EventTarget. This avoids possible loops if more than one EventTarget point to the same object, because the other EventTarget becomes a target itself, passing the event back and forth.

Modified: code/branches/core5/data/levels/events.oxw
===================================================================
--- code/branches/core5/data/levels/events.oxw	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/data/levels/events.oxw	2009-10-06 03:29:39 UTC (rev 5890)
@@ -95,7 +95,7 @@
     -->
     <Billboard name="bb3" position="100,150,0" material="Examples/Flare" colour="1.0, 1.0, 1.0" visible=0 />
     <Billboard name="bb3" position="100,150,100" material="Examples/Flare" colour="1.0, 1.0, 1.0" visible=0 />
-    <EventTarget name="bb3">
+    <EventTarget target="bb3">
       <events>
         <visibility>
           <DistanceTrigger position="100,100,0" distance=25 target="ControllableEntity" />
@@ -143,7 +143,7 @@
     <DistanceTrigger name="trigger5" position="-100,100,100" distance=25 target="ControllableEntity" />
     <EventDispatcher>
       <targets>
-        <EventTarget name="bb5" />
+        <EventTarget target="bb5" />
       </targets>
       <events>
         <visibility>

Modified: code/branches/core5/data/levels/old/physicstest2.oxw
===================================================================
--- code/branches/core5/data/levels/old/physicstest2.oxw	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/data/levels/old/physicstest2.oxw	2009-10-06 03:29:39 UTC (rev 5890)
@@ -242,9 +242,9 @@
 
     <!--EventDispatcher>
       <targets>
-        <EventTarget name=fireright />
-        <EventTarget name=firecenter />
-        <EventTarget name=fireleft />
+        <EventTarget target=fireright />
+        <EventTarget target=firecenter />
+        <EventTarget target=fireleft />
       </targets>
       <events>
         <activity>

Modified: code/branches/core5/data/levels/old/princessaeryn.oxw
===================================================================
--- code/branches/core5/data/levels/old/princessaeryn.oxw	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/data/levels/old/princessaeryn.oxw	2009-10-06 03:29:39 UTC (rev 5890)
@@ -263,7 +263,7 @@
             <!-- Trail -->
             <EventDispatcher>
                 <targets>
-                    <EventTarget name=trail />
+                    <EventTarget target=trail />
                 </targets>
                 <events>
                     <visibility>

Modified: code/branches/core5/data/levels/old/sample4.oxw
===================================================================
--- code/branches/core5/data/levels/old/sample4.oxw	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/data/levels/old/sample4.oxw	2009-10-06 03:29:39 UTC (rev 5890)
@@ -122,9 +122,9 @@
 
     <EventDispatcher>
       <targets>
-        <EventTarget name=fireright />
-        <EventTarget name=firecenter />
-        <EventTarget name=fireleft />
+        <EventTarget target=fireright />
+        <EventTarget target=firecenter />
+        <EventTarget target=fireleft />
       </targets>
       <events>
         <activity>

Modified: code/branches/core5/data/levels/presentation.oxw
===================================================================
--- code/branches/core5/data/levels/presentation.oxw	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/data/levels/presentation.oxw	2009-10-06 03:29:39 UTC (rev 5890)
@@ -150,9 +150,9 @@
 
     <EventDispatcher>
       <targets>
-        <EventTarget name=fireright />
-        <EventTarget name=firecenter />
-        <EventTarget name=fireleft />
+        <EventTarget target=fireright />
+        <EventTarget target=firecenter />
+        <EventTarget target=fireleft />
       </targets>
       <events>
         <activity>

Modified: code/branches/core5/data/levels/presentation09b.oxw
===================================================================
--- code/branches/core5/data/levels/presentation09b.oxw	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/data/levels/presentation09b.oxw	2009-10-06 03:29:39 UTC (rev 5890)
@@ -110,7 +110,7 @@
     <Billboard position="-2500, 2400, 1500" material="Examples/Flare" />
     <EventDispatcher>
       <targets>
-        <EventTarget name=pirates />
+        <EventTarget target=pirates />
       </targets>
       <events>
         <activity>
@@ -162,7 +162,7 @@
     <Billboard position="2300, 4400, 2500" material="Examples/Flare" />
     <EventDispatcher>
       <targets>
-        <EventTarget name=attacker />
+        <EventTarget target=attacker />
       </targets>
       <events>
         <activity>

Modified: code/branches/core5/data/levels/princessaeryn.oxw
===================================================================
--- code/branches/core5/data/levels/princessaeryn.oxw	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/data/levels/princessaeryn.oxw	2009-10-06 03:29:39 UTC (rev 5890)
@@ -226,7 +226,7 @@
             <!-- Trail -->
             <EventDispatcher>
                 <targets>
-                    <EventTarget name=trail />
+                    <EventTarget target=trail />
                 </targets>
                 <events>
                     <visibility>

Modified: code/branches/core5/src/modules/objects/eventsystem/EventTarget.cc
===================================================================
--- code/branches/core5/src/modules/objects/eventsystem/EventTarget.cc	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/src/modules/objects/eventsystem/EventTarget.cc	2009-10-06 03:29:39 UTC (rev 5890)
@@ -37,6 +37,8 @@
     EventTarget::EventTarget(BaseObject* creator) : BaseObject(creator)
     {
         RegisterObject(EventTarget);
+
+        this->bActive_ = false;
     }
 
     EventTarget::~EventTarget()
@@ -47,30 +49,40 @@
     {
         SUPER(EventTarget, XMLPort, xmlelement, mode);
 
+        XMLPortParam(EventTarget, "target", setTargetName, getTargetName, xmlelement, mode);
+
         // since we need event sources mapped to any state, we have to parse XML by ourselves
         this->loadAllEventStates(xmlelement, mode, this, Class(EventTarget));
     }
 
     void EventTarget::processEvent(Event& event)
     {
+        if (this->bActive_)
+        {
+            COUT(2) << "Warning: Detected Event loop in EventTarget \"" << this->getName() << "\"" << std::endl;
+            return;
+        }
+
+        this->bActive_ = true;
         this->fireEvent(event);
+        this->bActive_ = false;
     }
 
-    void EventTarget::changedName()
+    void EventTarget::setTargetName(const std::string& name)
     {
-        SUPER(EventTarget, changedName);
-
+        this->target_ = name;
+        
         for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); it != ObjectList<BaseObject>::end(); ++it)
-            if (it->getName() == this->getName())
+            if (it->getName() == this->target_)
                 this->addEventTarget(*it);
     }
 
     void EventTarget::loadedNewXMLName(BaseObject* object)
     {
-        if (this->getName() == "")
+        if (this->target_ == "")
             return;
 
-        if (object->getName() == this->getName())
+        if (object->getName() == this->target_)
             this->addEventTarget(object);
     }
 

Modified: code/branches/core5/src/modules/objects/eventsystem/EventTarget.h
===================================================================
--- code/branches/core5/src/modules/objects/eventsystem/EventTarget.h	2009-10-06 02:57:53 UTC (rev 5889)
+++ code/branches/core5/src/modules/objects/eventsystem/EventTarget.h	2009-10-06 03:29:39 UTC (rev 5890)
@@ -46,11 +46,16 @@
             
             virtual void processEvent(Event& event);
 
-            virtual void changedName();
+            void setTargetName(const std::string& name);
+            inline const std::string& getTargetName() const
+                { return this->target_; }
 
         private:
             virtual void loadedNewXMLName(BaseObject* object);
             void addEventTarget(BaseObject* object);
+            
+            std::string target_;
+            bool bActive_;
     };
 }
 




More information about the Orxonox-commit mailing list