Index: code/branches/pickupsFS14/src/modules/jump/CMakeLists.txt
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/CMakeLists.txt	(revision 10040)
+++ code/branches/pickupsFS14/src/modules/jump/CMakeLists.txt	(revision 10041)
@@ -3,4 +3,5 @@
   Jump.cc
   JumpPlatform.cc
+  JumpPlatformStatic.cc
   JumpPlatformHMove.cc
   JumpPlatformVMove.cc
Index: code/branches/pickupsFS14/src/modules/jump/Jump.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/Jump.cc	(revision 10040)
+++ code/branches/pickupsFS14/src/modules/jump/Jump.cc	(revision 10041)
@@ -44,4 +44,7 @@
 #include "JumpCenterpoint.h"
 #include "JumpPlatform.h"
+#include "JumpPlatformStatic.h"
+#include "JumpPlatformHMove.h"
+#include "JumpPlatformVMove.h"
 #include "JumpFigure.h"
 
@@ -65,9 +68,10 @@
 
         this->center_ = 0;
-        this->ball_ = 0;
         this->figure_ = 0;
         this->camera = 0;
 
-        //this->setHUDTemplate("JumpHUD");
+        platformList.clear();
+
+        this->setHUDTemplate("JumpHUD");
 
         // Pre-set the timer, but don't start it yet.
@@ -99,26 +103,56 @@
     	{
     		Vector3 figurePosition = figure_->getPosition();
+    		Vector3 figureVelocity = figure_->getVelocity();
 
     		if (figurePosition.z > totalScreenShift)
     		{
+    			screenShiftSinceLastUpdate += figurePosition.z - totalScreenShift;
     			totalScreenShift = figurePosition.z;
+
+                // Falls noetig neue Platformen im neuen Bereich einfuegen
+                if (screenShiftSinceLastUpdate > sectionLength)
+                {
+                	screenShiftSinceLastUpdate -= sectionLength;
+                    addSection();
+                }
     		}
 
+    		// Spiel verloren wegen Ansturz?
+    		if (figurePosition.z < totalScreenShift - center_->getFieldDimension().y && figureVelocity.z < 0)
+    		{
+    			end();
+    		}
+
+
     		if (this->camera != NULL)
 			{
-				Vector3 cameraPosition = Vector3(0,totalScreenShift,0);
+				Vector3 cameraPosition = Vector3(0, totalScreenShift, 0);
 				camera->setPosition(cameraPosition);
 			}
 			else
 			{
-				orxout() << "no camera found" << endl;
+				orxout() << "No camera found." << endl;
 				//this->camera = this->figure_->getCamera();
 			}
     	}
-
-
-
-
-
+    	else
+    	{
+    		//orxout() << "No figure found." << endl;
+    	}
+
+		// Platformen, die zu weit unten sind entfernen
+		Vector3 platformPosition;
+		for (std::list<JumpPlatform*>::iterator it = platformList.begin(); it != platformList.end(); it++)
+		{
+			// IDEE: Statt durch alle platformen in der Liste, wie im Tutorial durch alle objekte im Spiel iterieren --> eigene liste unnoetig
+			platformPosition = (**it).getPosition();
+			if (platformPosition.z < totalScreenShift - center_->getFieldDimension().y)
+			{
+				// Entferne Platform
+				orxout() << "position = " << (**it).getPosition().y << endl;
+				center_->detach(*it);
+				it = platformList.erase(it);
+			}
+		}
     }
 
@@ -135,9 +169,9 @@
     void Jump::cleanup()
     {
-        if (this->ball_ != NULL) // Destroy the ball, if present.
+        /*if (this->ball_ != NULL) // Destroy the ball, if present.
         {
             this->ball_->destroy();
             this->ball_ = 0;
-        }
+        }*/
 
         // Destroy both bats, if present.
@@ -158,15 +192,14 @@
         if (this->center_ != NULL) // There needs to be a JumpCenterpoint, i.e. the area the game takes place.
         {
-            if (this->ball_ == NULL) // If there is no ball, create a new ball.
-            {
-                this->ball_ = new JumpPlatform(this->center_->getContext());
-                // Apply the template for the ball specified by the centerpoint.
-                this->ball_->addTemplate(this->center_->getBalltemplate());
-            }
+
 
             // Attach the ball to the centerpoint and set the parameters as specified in the centerpoint, the ball is attached to.
-            this->center_->attach(this->ball_);
+            /*this->center_->attach(this->ball_);
             this->ball_->setPosition(0, 0, 0);
             this->ball_->setFieldDimension(this->center_->getFieldDimension());
+
+            // Set the bats for the ball.
+            this->ball_->setFigure(this->figure_);
+            */
 
             // If one of the bats is missing, create it. Apply the template for the bats as specified in the centerpoint.
@@ -185,6 +218,5 @@
             this->figure_->setLength(this->center_->getBatLength());
 
-            // Set the bats for the ball.
-            this->ball_->setFigure(this->figure_);
+
         }
         else // If no centerpoint was specified, an error is thrown and the level is exited.
@@ -214,4 +246,11 @@
 
         totalScreenShift = 0.0;
+        screenShiftSinceLastUpdate = 0.0;
+        sectionNumber = 0;
+        sectionLength = 100.0;
+
+        addStartSection();
+        addSection();
+        addSection();
     }
 
@@ -354,3 +393,85 @@
     }
 
+    void Jump::addPlatform(JumpPlatform* newPlatform, float xPosition, float zPosition)
+    {
+    	if (newPlatform != NULL)
+		{
+    		newPlatform->setPosition(Vector3(xPosition, 0.0, zPosition));
+    		newPlatform->setFieldDimension(center_->getFieldDimension());
+    		newPlatform->setFigure(this->figure_);
+    		center_->attach(newPlatform);
+    		platformList.push_front(newPlatform);
+		}
+    }
+
+    void Jump::addStartSection()
+    {
+		JumpPlatform* newPlatform;
+
+		for (float xPosition = -center_->getFieldDimension().x; xPosition <= center_->getFieldDimension().x; xPosition += 12.0)
+		{
+			newPlatform = new JumpPlatformStatic(center_->getContext());
+			addPlatform(newPlatform, xPosition, -0.05*sectionLength);
+		}
+    }
+
+    void Jump::addSection()
+    {
+        float fieldWidth = center_->getFieldDimension().x;
+        float fieldHeight = center_->getFieldDimension().y;
+
+        float sectionBegin = sectionNumber * sectionLength;
+        float sectionEnd = (1.0 + sectionNumber) * sectionLength;
+
+        JumpPlatformStatic* newPlatformStatic;
+        JumpPlatformHMove* newPlatformHMove;
+        JumpPlatformVMove* newPlatformVMove;
+
+		switch (rand()%3)
+		{
+		case 0:
+			for (int i = 0; i < 10; ++i)
+			{
+				newPlatformStatic = new JumpPlatformStatic(center_->getContext());
+				addPlatform(newPlatformStatic, randomXPosition(), sectionBegin + i*sectionLength/10);
+			}
+			break;
+		case 1:
+			for (int i = 0; i < 10; ++i)
+			{
+				newPlatformHMove = new JumpPlatformHMove(center_->getContext());
+				newPlatformHMove->setProperties(-fieldWidth, fieldWidth, 30.0);
+				addPlatform(newPlatformHMove, randomXPosition(), sectionBegin + i*sectionLength/10);
+			}
+
+			break;
+		case 2:
+			for (int i = 0; i < 10; ++i)
+			{
+				newPlatformVMove = new JumpPlatformVMove(center_->getContext());
+				newPlatformVMove->setProperties(sectionBegin, sectionEnd, 20.0);
+				addPlatform(newPlatformVMove, -fieldWidth + i*fieldWidth*2/10, randomYPosition(sectionBegin, sectionEnd));
+			}
+			break;
+		}
+		orxout() << "new section added with number "<< sectionNumber << endl;
+
+		++ sectionNumber;
+    }
+
+    float Jump::randomXPosition()
+    {
+    	return (float)(rand()%(2*(int)center_->getFieldDimension().x)) - center_->getFieldDimension().x;
+    }
+
+    float Jump::randomYPosition(float lowerBoundary, float upperBoundary)
+    {
+    	return (float)(rand()%(int)(upperBoundary - lowerBoundary)) + lowerBoundary;
+    }
+
+    int Jump::getScore(PlayerInfo* player) const
+    {
+        return sectionNumber - 2;
+    }
+
 }
Index: code/branches/pickupsFS14/src/modules/jump/Jump.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/Jump.h	(revision 10040)
+++ code/branches/pickupsFS14/src/modules/jump/Jump.h	(revision 10041)
@@ -44,4 +44,6 @@
 #include "JumpCenterpoint.h"
 
+#include <list>
+
 namespace orxonox
 {
@@ -78,4 +80,12 @@
             virtual void playerScored(PlayerInfo* player, int score = 1); //!< Is called when the player scored.
 
+            virtual void addPlatform(JumpPlatform* newPlatform, float xPosition, float zPosition);
+            virtual void addStartSection();
+            virtual void addSection();
+            virtual float randomXPosition();
+            virtual float randomYPosition(float lowerBoundary, float upperBoundary);
+
+            int getScore(PlayerInfo* player) const;
+
             /**
             @brief Set the JumpCenterpoint (the playing field).
@@ -95,5 +105,5 @@
 
             WeakPtr<JumpCenterpoint> center_; //!< The playing field.
-            WeakPtr<JumpPlatform> ball_; //!< The Jump ball.
+            //WeakPtr<JumpPlatform> ball_; //!< The Jump ball.
             WeakPtr<JumpFigure> figure_; //!< The two bats.
             WeakPtr<Camera> camera;
@@ -102,4 +112,8 @@
 
             float totalScreenShift;
+            float screenShiftSinceLastUpdate;
+            float sectionLength;
+            int sectionNumber;
+            std::list<JumpPlatform*> platformList;
     };
 }
Index: code/branches/pickupsFS14/src/modules/jump/JumpPlatform.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatform.cc	(revision 10040)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatform.cc	(revision 10041)
@@ -36,5 +36,5 @@
 #include "core/CoreIncludes.h"
 #include "core/GameMode.h"
-
+#include "graphics/Model.h"
 #include "gametypes/Gametype.h"
 
@@ -86,4 +86,6 @@
         this->setVelocity(Vector3(0,0,0));
         this->setAcceleration(Vector3(0,0,0));
+
+        model = NULL;
     }
 
@@ -94,5 +96,5 @@
     JumpPlatform::~JumpPlatform()
     {
-        if (this->isInitialized())
+        /*if (this->isInitialized())
         {
             if (this->bDeleteBats_)
@@ -100,5 +102,5 @@
 
             delete[] this->batID_;
-        }
+        }*/
     }
 
@@ -137,5 +139,4 @@
 
         Vector3 platformPosition = this->getPosition();
-        Vector3 platformVelocity = this->getVelocity();
 
         if (figure_ != NULL)
@@ -149,4 +150,6 @@
             }
         }
+
+
 
 
Index: code/branches/pickupsFS14/src/modules/jump/JumpPlatform.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatform.h	(revision 10040)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatform.h	(revision 10041)
@@ -111,4 +111,5 @@
             WorldSound* defScoreSound_;
             WorldSound* defBatSound_;
+            Model* model;
             WorldSound* defBoundarySound_;
     };
Index: code/branches/pickupsFS14/src/modules/jump/JumpPrereqs.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPrereqs.h	(revision 10040)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPrereqs.h	(revision 10041)
@@ -70,5 +70,7 @@
     class Jump;
     class JumpPlatform;
+    class JumpPlatformStatic;
     class JumpPlatformHMove;
+    class JumpPlatformVMove;
     class JumpFigure;
     class JumpCenterpoint;
Index: code/branches/pickupsFS14/src/orxonox/worldentities/WorldEntity.h
===================================================================
--- code/branches/pickupsFS14/src/orxonox/worldentities/WorldEntity.h	(revision 10040)
+++ code/branches/pickupsFS14/src/orxonox/worldentities/WorldEntity.h	(revision 10041)
@@ -164,6 +164,6 @@
                 { this->scale3D(Vector3(x, y, z)); }
             inline void scale(float scale)
+
                 { this->scale3D(scale, scale, scale); }
-
             virtual void changedScale() {}
 
