[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