[Orxonox-commit 3423] r8110 - code/branches/spaceboundaries/src/orxonox/worldentities

kmaurus at orxonox.net kmaurus at orxonox.net
Thu Mar 24 16:16:55 CET 2011


Author: kmaurus
Date: 2011-03-24 16:16:54 +0100 (Thu, 24 Mar 2011)
New Revision: 8110

Modified:
   code/branches/spaceboundaries/src/orxonox/worldentities/CMakeLists.txt
   code/branches/spaceboundaries/src/orxonox/worldentities/SpaceBoundaries.cc
   code/branches/spaceboundaries/src/orxonox/worldentities/SpaceBoundaries.h
Log:
Iteratorschleife aller MobileEntities sowie Funktion zum Berechnen des Abstandes einer MobileEntity vom Zentrun erstellt

Modified: code/branches/spaceboundaries/src/orxonox/worldentities/CMakeLists.txt
===================================================================
--- code/branches/spaceboundaries/src/orxonox/worldentities/CMakeLists.txt	2011-03-24 15:05:21 UTC (rev 8109)
+++ code/branches/spaceboundaries/src/orxonox/worldentities/CMakeLists.txt	2011-03-24 15:16:54 UTC (rev 8110)
@@ -11,6 +11,7 @@
   CameraPosition.cc
   SpawnPoint.cc
   TeamSpawnPoint.cc
+  SpaceBoundaries.cc
 )
 
 ADD_SUBDIRECTORY(pawns)

Modified: code/branches/spaceboundaries/src/orxonox/worldentities/SpaceBoundaries.cc
===================================================================
--- code/branches/spaceboundaries/src/orxonox/worldentities/SpaceBoundaries.cc	2011-03-24 15:05:21 UTC (rev 8109)
+++ code/branches/spaceboundaries/src/orxonox/worldentities/SpaceBoundaries.cc	2011-03-24 15:16:54 UTC (rev 8110)
@@ -29,13 +29,14 @@
 #include "SpaceBoundaries.h"
 
 /* Folgender Block ist Copy-Paste und somit teilweise wohl unnoetig */
-#include "core/CoreIncludes.h"
 #include "core/Template.h"
 #include "core/XMLPort.h"
 #include "gametypes/Gametype.h"
 #include "worldentities/pawns/Pawn.h"
 
 /* Eigene, spezifische include-Statements*/
+#include "worldentities/MobileEntity.h"
+#include "core/ObjectListIterator.h"
 
 namespace orxonox
 {
@@ -44,18 +45,94 @@
     SpaceBoundaries::SpaceBoundaries(BaseObject* creator) : StaticEntity(creator)
     {
         RegisterObject(SpaceBoundaries);
+        
+        // Show Boundaries on the radar.
     }
-    
     SpaceBoundaries::~SpaceBoundaries()
     {
     
     }
+    
+    void SpaceBoundaries::setCenter(Vector3 r)
+    {
+        this->center = r;
+    }
+    Vector3 SpaceBoundaries::getCenter()
+    {
+        return this->center;
+    }
+    
+    void SpaceBoundaries::setMaxDistance(float r)
+    {
+        this->maxDistance = r;
+    }
+    float SpaceBoundaries::getMaxDistance()
+    {
+        return this->maxDistance;
+    }
+    
+    void SpaceBoundaries::setWarnDistance(float r)
+    {
+        this->warnDistance = r;
+    }
+    float SpaceBoundaries::getWarnDistance()
+    {
+        return this->warnDistance;
+    }
 
     void SpaceBoundaries::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
-    //    SUPER(SpaceBoundaries, XMLPort, xmlelement, mode);
+        SUPER(SpaceBoundaries, XMLPort, xmlelement, mode);
 
-    //    XMLPortParam(SpaceBoundaries, "spawnclass", setSpawnClassName, getSpawnClassName, xmlelement, mode);
-    //    XMLPortParam(SpaceBoundaries, "pawndesign", setTemplateName, getTemplateName, xmlelement, mode);
+        XMLPortParam(SpaceBoundaries, "center", setCenter, getCenter, xmlelement, mode);
+        XMLPortParam(SpaceBoundaries, "maxDistance", setMaxDistance, getMaxDistance, xmlelement, mode);
+        XMLPortParam(SpaceBoundaries, "warnDistance", setWarnDistance, getWarnDistance, xmlelement, mode);
     }
+    
+    void SpaceBoundaries::tick(float dt)
+    {
+        for(ObjectListIterator<MobileEntity> item = ObjectList<MobileEntity>::begin(); item != ObjectList<MobileEntity>::end(); ++item)
+        {
+            float distance = computeDistance((WorldEntity *)&item); // fuer casts gibt's scheinbar andere, neuere Variante --> vgl. Coding-Guide und andere Files
+            if(distance > this->warnDistance && distance < this->maxDistance)
+            {
+                COUT(0) << "You are leaving the area" << std::endl; //!< message for debugging
+                // Display Warning on Screen if the humanPlayer (infos/PlayerInfo.h) is leaving the area
+            } else if(distance > maxDistance)
+            {
+                // Decrease Health
+            }
+        }
+    }
+    
+    float SpaceBoundaries::computeDistance(WorldEntity *item)
+    {
+        Vector3 itemPosition = item->getPosition();
+        return (itemPosition.distance(center));
+    }
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
 }

Modified: code/branches/spaceboundaries/src/orxonox/worldentities/SpaceBoundaries.h
===================================================================
--- code/branches/spaceboundaries/src/orxonox/worldentities/SpaceBoundaries.h	2011-03-24 15:05:21 UTC (rev 8109)
+++ code/branches/spaceboundaries/src/orxonox/worldentities/SpaceBoundaries.h	2011-03-24 15:16:54 UTC (rev 8110)
@@ -33,24 +33,41 @@
 #include "OrxonoxPrereqs.h"
 #include <string>
 #include "core/SubclassIdentifier.h"
-#include "worldentities/StaticEntity.h"
 
 /* Einige, spezifische include-Statements */
+#include "core/CoreIncludes.h"
+#include "tools/interfaces/Tickable.h"
+#include "worldentities/StaticEntity.h"
+#include "worldentities/WorldEntity.h"
 
 
-
 namespace orxonox
 {
     class _OrxonoxExport SpaceBoundaries : public StaticEntity, public Tickable
     {
         public:
             SpaceBoundaries(BaseObject* creator);
-            virtual ~SpaceBoundaries() {}
+            ~SpaceBoundaries();
+            
+            void setCenter(Vector3 r);
+            Vector3 getCenter();
+            
+            void setMaxDistance(float r);
+            float getMaxDistance();
+            
+            void setWarnDistance(float r);
+            float getWarnDistance();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            
+            void tick(float dt);
 
         private:
+            Vector3 center;
+            float maxDistance;
+            float warnDistance;
         
+            float computeDistance(WorldEntity *item); //!< Auf den Mittelpunkt 'center' bezogen.
     };
 }
 




More information about the Orxonox-commit mailing list