[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