[Orxonox-commit 5411] r10074 - in code/branches/pickupsFS14: data/levels data/overlays src/modules/invader src/modules/jump

fvultier at orxonox.net fvultier at orxonox.net
Thu May 22 15:05:46 CEST 2014


Author: fvultier
Date: 2014-05-22 15:05:46 +0200 (Thu, 22 May 2014)
New Revision: 10074

Added:
   code/branches/pickupsFS14/src/modules/jump/JumpBoots.cc
   code/branches/pickupsFS14/src/modules/jump/JumpBoots.h
   code/branches/pickupsFS14/src/modules/jump/JumpPropeller.cc
   code/branches/pickupsFS14/src/modules/jump/JumpPropeller.h
   code/branches/pickupsFS14/src/modules/jump/JumpRocket.cc
   code/branches/pickupsFS14/src/modules/jump/JumpRocket.h
   code/branches/pickupsFS14/src/modules/jump/JumpShield.cc
   code/branches/pickupsFS14/src/modules/jump/JumpShield.h
   code/branches/pickupsFS14/src/modules/jump/JumpSpring.cc
   code/branches/pickupsFS14/src/modules/jump/JumpSpring.h
Modified:
   code/branches/pickupsFS14/data/levels/jump.oxw
   code/branches/pickupsFS14/data/overlays/jumpHUD.oxo
   code/branches/pickupsFS14/src/modules/invader/InvaderWeapon.cc
   code/branches/pickupsFS14/src/modules/jump/CMakeLists.txt
   code/branches/pickupsFS14/src/modules/jump/Jump.cc
   code/branches/pickupsFS14/src/modules/jump/Jump.h
   code/branches/pickupsFS14/src/modules/jump/JumpCenterpoint.cc
   code/branches/pickupsFS14/src/modules/jump/JumpCenterpoint.h
   code/branches/pickupsFS14/src/modules/jump/JumpEnemy.cc
   code/branches/pickupsFS14/src/modules/jump/JumpEnemy.h
   code/branches/pickupsFS14/src/modules/jump/JumpFigure.cc
   code/branches/pickupsFS14/src/modules/jump/JumpFigure.h
   code/branches/pickupsFS14/src/modules/jump/JumpItem.cc
   code/branches/pickupsFS14/src/modules/jump/JumpItem.h
   code/branches/pickupsFS14/src/modules/jump/JumpPlatform.cc
   code/branches/pickupsFS14/src/modules/jump/JumpPlatform.h
   code/branches/pickupsFS14/src/modules/jump/JumpPlatformDisappear.cc
   code/branches/pickupsFS14/src/modules/jump/JumpPlatformFake.cc
   code/branches/pickupsFS14/src/modules/jump/JumpPlatformHMove.cc
   code/branches/pickupsFS14/src/modules/jump/JumpPlatformStatic.cc
   code/branches/pickupsFS14/src/modules/jump/JumpPlatformTimer.cc
   code/branches/pickupsFS14/src/modules/jump/JumpPlatformVMove.cc
   code/branches/pickupsFS14/src/modules/jump/JumpPrereqs.h
   code/branches/pickupsFS14/src/modules/jump/JumpProjectile.cc
   code/branches/pickupsFS14/src/modules/jump/JumpProjectile.h
   code/branches/pickupsFS14/src/modules/jump/JumpScore.cc
   code/branches/pickupsFS14/src/modules/jump/JumpScore.h
Log:
new items added. improved level generator.


Modified: code/branches/pickupsFS14/data/levels/jump.oxw
===================================================================
--- code/branches/pickupsFS14/data/levels/jump.oxw	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/data/levels/jump.oxw	2014-05-22 13:05:46 UTC (rev 10074)
@@ -2,7 +2,7 @@
  name = "Jump"
  description = "Jump in space!"
  tags = "minigame"
- screenshot = "pong.png"
+ screenshot = "jump.png"
 />
 
 <?lua
@@ -20,95 +20,177 @@
   </JumpFigure>
 </Template>
 
+<Template name=figureLeftHand defaults=0>
+  <Model position="4.0,0.0,5.0" mesh="FigureLeftHand.mesh" scale=1 pitch=90>
+  </Model>
+</Template>
 
+<Template name=figureRightHand defaults=0>
+  <Model position="-4.0,0.0,5.0" mesh="FigureRightHand.mesh" scale=1 pitch=90>
+  </Model>
+</Template>
 
 <Template name=jumpFigureTemplate>
-  <JumpFigure camerapositiontemplate=jumpfigurecameras mouseFactor="100.0">
+  <JumpFigure camerapositiontemplate=jumpfigurecameras mouseFactor="100.0" modelLefthand=figureLeftHand  modelRighthand=figureRightHand rocketPos=10.0 propellerPos=10.0 bootsPos=-5.2 jumpSpeed=250.0 handMinAngle=-20 handMaxAngle=75 handSpeed=250 rocketSpeed=250.0 propellerSpeed=150.0>
     <attached>
-      <Model position="0,0,0" mesh="sphere.mesh" scale=4 />
+      <Model position="0,0,0" mesh="Figure.mesh" scale=1 pitch=90/>
     </attached>
-  <!--
-      <controller>
-        <HumanController />
-      </controller>    
-    -->
   </JumpFigure>
 </Template>
 
 <Template name=jumpProjectileTemplate>
   <JumpProjectile>
     <attached>
-      <Model mesh="Projectile.mesh" scale=1.2  pitch=90/>
+      <Model mesh="Projectile.mesh" scale=1  pitch=90/>
       <ParticleEmitter scale=1 pitch=0 roll=0 position="0, 0, 0" source="Orxonox/thruster3" lifetime=2.0 loop=1 startdelay=0.0 />
     </attached>
   </JumpProjectile>
 </Template>
 
 <Template name=jumpPlatformStaticTemplate>
-  <JumpPlatformStatic>
+  <JumpPlatformStatic height=3 width=19>
     <attached>
-      <Model mesh="Platform01.mesh" scale=1.2  pitch=90/>
+      <Model mesh="Platform01.mesh" scale=1  pitch=90/>
+      <Backlight scale=0.2 colour="0.9, 0.4, 0.0" width=7 length=500 lifetime=0.3 elements=20 trailmaterial="Trail/backlighttrail" material="Examples/Flare" loop=1 />
     </attached>
   </JumpPlatformStatic>
 </Template>
 
 <Template name=jumpPlatformHMoveTemplate>
-  <JumpPlatformHMove>
+  <JumpPlatformHMove height=3 width=19>
     <attached>
-      <Model mesh="Platform02.mesh" scale=1.2  pitch=90/>
+      <Model mesh="Platform02.mesh" scale=1  pitch=90/>
       <Backlight scale=0.2 colour="0.1, 0.1, 1.0" width=7 length=500 lifetime=0.3 elements=20 trailmaterial="Trail/backlighttrail" material="Examples/Flare" loop=1 />
     </attached>
   </JumpPlatformHMove>
 </Template>
 
 <Template name=jumpPlatformVMoveTemplate>
-  <JumpPlatformVMove>
+  <JumpPlatformVMove height=3 width=19>
     <attached>
-      <Model mesh="Platform03.mesh" scale=1.2  pitch=90/>
-      <Backlight scale=0.2 colour="1.0, 1.0, 1.0" width=7 length=500 lifetime=0.3 elements=20 trailmaterial="Trail/backlighttrail" material="Examples/Flare" loop=1 />
+      <Model mesh="Platform03.mesh" scale=1  pitch=90/>
+      <Backlight scale=0.2 colour="1.0, 0.1, 1.0" width=7 length=500 lifetime=0.3 elements=20 trailmaterial="Trail/backlighttrail" material="Examples/Flare" loop=1 />
     </attached>
   </JumpPlatformVMove>
 </Template>
 
 <Template name=jumpPlatformDisappearTemplate>
-  <JumpPlatformDisappear>
+  <JumpPlatformDisappear height=3 width=19>
     <attached>
-      <Model mesh="Platform04.mesh" scale=1.2  pitch=90/>
-      <Backlight scale=0.2 colour="0.0, 0.0, 1.0" width=7 length=500 lifetime=0.3 elements=20 trailmaterial="Trail/backlighttrail" material="Examples/Flare" loop=1 />
-            <Backlight scale=0.2 colour="0.0, 1.0, 0.1" width=7 length=500 lifetime=0.3 elements=20 trailmaterial="Trail/backlighttrail" material="Examples/Flare" loop=1 />       
+      <Model mesh="Platform04.mesh" scale=1  pitch=90/>
+      <Backlight scale=0.2 colour="0.1, 1.0, 0.1" width=7 length=500 lifetime=0.3 elements=20 trailmaterial="Trail/backlighttrail" material="Examples/Flare" loop=1 />
     </attached>
   </JumpPlatformDisappear>
 </Template>
 
 <Template name=jumpPlatformTimerTemplate>
-  <JumpPlatformTimer effectPath="Orxonox/BigExplosion1part2" effectStartTime="0.4">
+  <JumpPlatformTimer height=3 width=19 effectPath="Orxonox/BigExplosion1part2" effectStartTime="0.4">
     <attached>
-      <Model mesh="Platform05.mesh" scale=1.2  pitch=90/>
+      <Model mesh="Platform05.mesh" scale=1  pitch=90/>
+      <ParticleEmitter scaled3D="5.0, 1.0, 2.0" pitch=0 roll=0 position="-4, 0, -2.0" source="Orxonox/thruster3" lifetime=2.0 loop=1 startdelay=0.0 />
       <ParticleEmitter scaled3D="5.0, 1.0, 2.0" pitch=0 roll=0 position="0, 0, -2.0" source="Orxonox/thruster3" lifetime=2.0 loop=1 startdelay=0.0 />
-
-      <!-- <ParticleSpawner name=hiteffect position="0,0,0" source="Orxonox/sparks2" lifetime=0.01 autostart=0 mainstate=spawn /> -->
+      <ParticleEmitter scaled3D="5.0, 1.0, 2.0" pitch=0 roll=0 position="4, 0, -2.0" source="Orxonox/thruster3" lifetime=2.0 loop=1 startdelay=0.0 />      
     </attached>
   </JumpPlatformTimer>
 </Template>
 
 <Template name=jumpPlatformFakeTemplate>
-  <JumpPlatformFake>
+  <JumpPlatformFake height=3 width=19>
     <attached>
-      <Model mesh="Platform06.mesh" scale=1.2  pitch=90/>
+      <Model mesh="Platform06.mesh" scale=1  pitch=90/>
       <ParticleEmitter scale3D="0.2,0.2,0.2" pitch=0 roll=0 position="0, 0, -2.5" source="Orxonox/sparks" lifetime=1.0 loop=1 startdelay=0.0 />
     </attached>
   </JumpPlatformFake>
 </Template>
 
-<Template name=jumpPlatformEnemy1Template>
-  <JumpEnemy>
+<Template name=jumpEnemy1Template>
+  <JumpEnemy height=7 width=18>
     <attached>
-      <Model mesh="cube.mesh" scale3D="10.0, 4.0, 4.0"  pitch=90/>
+      <Model mesh="Enemy1.mesh" scale=1  pitch=90/>
+      <FadingBillboard active=true scale=0.09 position="0, 0, 10" colour="0.2, 1.0, 0.65, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+      <Backlight scale=0.33 name=bltest position="0, 0, -10" colour="0.6, 0.8, 0.75, 0.7" width=25 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />            
     </attached>
   </JumpEnemy>
 </Template>
 
+<Template name=jumpEnemy2Template>
+  <JumpEnemy height=8 width=20>
+    <attached>
+      <Model mesh="Enemy2.mesh" scale=1  pitch=90/>
+      <MovableEntity position="-17, 0, 4" rotationaxis="0, 1, 0" rotationrate=500 >
+        <attached>
+          <Model mesh="Enemy2Wing.mesh" scale=1 pitch=90/>
+        </attached>
+      </MovableEntity>      
+      <MovableEntity position="17, 0, 4" rotationaxis="0, 1, 0" rotationrate=500 >
+        <attached>
+          <Model mesh="Enemy2Wing.mesh" scale=1 pitch=90/>
+        </attached>
+      </MovableEntity> 
+      <ParticleEmitter scale3D="1.0,1.0,1.0" pitch=0 roll=0 position="-1, 0, -3" source="Orxonox/laser" lifetime=1.0 loop=1 startdelay=0.0 />
+    </attached>
+  </JumpEnemy>
+</Template>
 
+<Template name=jumpEnemy3Template>
+  <JumpEnemy height=8.2 width=11.2>
+    <attached>
+      <Model mesh="Enemy3.mesh" scale=1  pitch=90/>
+      <Backlight scale3D="0.1, 0.1, 1.0" position="0, -11, -4" colour="1.0, 0.0, 0.9, 1.0" width=1 length=1 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1"/>
+      <Backlight scale3D="0.1, 0.1, 1.0" position="6.32, 5.5, -4" colour="1.0, 0.0, 0.9, 1.0" width=1 length=1 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1"/>
+      <Backlight scale3D="0.1, 0.1, 1.0" position="-6.32, 5.5, -4" colour="1.0, 0.0, 0.9, 1.0" width=1 length=1 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1"/>            
+    </attached>
+  </JumpEnemy>
+</Template>
+
+<Template name=jumpEnemy4Template>
+  <JumpEnemy height=7.5 width=21.5 rotationaxis="0, 0, 1" rotationrate=40 >
+    <attached>
+      <Model mesh="Enemy4.mesh" scale=1  pitch=90/>
+    </attached>
+  </JumpEnemy>
+</Template>
+
+<Template name=jumpSpringTemplate>
+  <JumpSpring height=6 width=9.25>
+    <attached>
+      <Model mesh="Spring.mesh" scale=1  rotationaxis="0, 0, 1" pitch=90 position="0.0, 0.0, 0.0"/>
+    </attached>
+  </JumpSpring>
+</Template>
+
+<Template name=jumpRocketTemplate>
+  <JumpRocket height=8.5 width=13.5>
+    <attached>
+      <Model mesh="Rocket.mesh" scale=1  pitch=90 position="0.0, 0.0, 1.0"/>
+    </attached>
+  </JumpRocket>
+</Template>
+
+<Template name=jumpPropellerTemplate>
+  <JumpPropeller height=4 width=15.5>
+    <attached>
+      <Model mesh="Propeller.mesh" scale=1  pitch=90 position="0.0, 0.0, 1.0"/>
+    </attached>
+  </JumpPropeller>
+</Template>
+
+<Template name=jumpBootsTemplate>
+  <JumpBoots height=5.2 width=3.5>
+    <attached>
+      <Model mesh="Boots.mesh" scale=1  pitch=90 position="0.0, 0.0, 1.0"/>
+    </attached>
+  </JumpBoots>
+</Template>
+
+<Template name=jumpShieldTemplate>
+  <JumpShield height=1.55 width=15.5>
+    <attached>
+      <Model mesh="Shield.mesh" scale=1 pitch=90 position="0.0, 0.0, 1.0"/>
+    </attached>
+  </JumpShield>
+</Template>
+
 <Level gametype = "Jump">
   <templates>
     <Template link=lodtemplate_default />
@@ -128,18 +210,28 @@
         <JumpCenterpoint
           name=jumpcenter
           dimension="120,80"
-          sectionLength="100"
-          platformLength="12"
+          sectionLength="150"
+          platformSpeed="20"
+          cameraOffset="10"
 
           platformStaticTemplate=jumpPlatformStaticTemplate
           platformHMoveTemplate=jumpPlatformHMoveTemplate
           platformVMoveTemplate=jumpPlatformVMoveTemplate
           platformDisappearTemplate=jumpPlatformDisappearTemplate
           platformTimerTemplate=jumpPlatformTimerTemplate
-          platformFakeTemplate=jumpPlatformFakeTemplate
-          enemy1Template=jumpPlatformEnemy1Template
+          platformFakeTemplate=jumpPlatformFakeTemplate          
           figureTemplate=jumpFigureTemplate
-          projectileTemplate=jumpProjectileTemplate>
+          projectileTemplate=jumpProjectileTemplate
+          springTemplate=jumpSpringTemplate
+          rocketTemplate=jumpRocketTemplate
+          propellerTemplate=jumpPropellerTemplate
+          bootsTemplate=jumpBootsTemplate
+          shieldTemplate=jumpShieldTemplate
+          enemy1Template=jumpEnemy1Template
+          enemy2Template=jumpEnemy2Template
+          enemy3Template=jumpEnemy3Template
+          enemy4Template=jumpEnemy4Template
+          >
 
           <attached>
 
@@ -149,35 +241,14 @@
             <Model position="0,0,-1000" mesh="Platform04.mesh" scale="1" />
             <Model position="0,0,-1000" mesh="Platform05.mesh" scale="1" />
             <Model position="0,0,-1000" mesh="Platform06.mesh" scale="1" />
-
             <Model position="0,0,-1000" mesh="Projectile.mesh" scale="1" />
-
-            <!--                   
-            <Model position="0,0,60" mesh="cube.mesh" scale3D="105,1,1" />
-            <Model position="0,0,-60" mesh="cube.mesh" scale3D="105,1,1" />            
-            
-            <ParticleSpawner name=scoreeffect_right position="120,0, 45" source="Orxonox/sparks2" lifetime=0.1 autostart=0 />
-            <ParticleSpawner name=scoreeffect_right position="120,0, 30" source="Orxonox/BigExplosion1part2" lifetime=3.0 autostart=0 />
-            <ParticleSpawner name=scoreeffect_right position="120,0, 15" source="Orxonox/sparks2" lifetime=0.1 autostart=0 />
-            <ParticleSpawner name=scoreeffect_right position="120,0,  0" source="Orxonox/BigExplosion1part2" lifetime=0.1 autostart=0 />
-            <ParticleSpawner name=scoreeffect_right position="120,0,-15" source="Orxonox/sparks2" lifetime=0.1 autostart=0 />
-            <ParticleSpawner name=scoreeffect_right position="120,0,-30" source="Orxonox/BigExplosion1part2" lifetime=3.0 autostart=0 />
-            <ParticleSpawner name=scoreeffect_right position="120,0,-45" source="Orxonox/sparks2" lifetime=0.1 autostart=0 />
-
-            <ParticleSpawner name=scoreeffect_left position="-120,0, 45" source="Orxonox/sparks2" lifetime=0.1 autostart=0 />
-            <ParticleSpawner name=scoreeffect_left position="-120,0, 30" source="Orxonox/BigExplosion1part2" lifetime=3.0 autostart=0 />
-            <ParticleSpawner name=scoreeffect_left position="-120,0, 15" source="Orxonox/sparks2" lifetime=0.1 autostart=0 />
-            <ParticleSpawner name=scoreeffect_left position="-120,0,  0" source="Orxonox/BigExplosion1part2" lifetime=0.1 autostart=0 />
-            <ParticleSpawner name=scoreeffect_left position="-120,0,-15" source="Orxonox/sparks2" lifetime=0.1 autostart=0 />
-            <ParticleSpawner name=scoreeffect_left position="-120,0,-30" source="Orxonox/BigExplosion1part2" lifetime=3.0 autostart=0 />
-            <ParticleSpawner name=scoreeffect_left position="-120,0,-45" source="Orxonox/sparks2" lifetime=0.1 autostart=0 />
-            
-            <?lua
-              for i = 1, 15, 1 do
-            ?>
-              <ParticleSpawner name=scoreeffect_center position="<?lua print(math.random() * 200 - 100) ?>,0,<?lua print(math.random() * 120 - 60) ?>" source="Orxonox/sparks2" lifetime=0.02 autostart=0 startdelay=<?lua print(math.random() * 0.7) ?> />
-            <?lua end ?>
-            -->
+            <Model position="0,0,-1000" mesh="Figure.mesh" scale="1" />
+            <Model position="0,0,-1000" mesh="Enemy1.mesh" scale="1" />
+            <Model position="0,0,-1000" mesh="Enemy2.mesh" scale="1" />
+            <Model position="0,0,-1000" mesh="Enemy3.mesh" scale="1" />
+            <Model position="0,0,-1000" mesh="Enemy4.mesh" scale="1" />
+            <Model position="0,0,-1000" mesh="Spring.mesh" scale="1" />
+            <Model position="0,0,-1000" mesh="Rocket.mesh" scale="1" />
           </attached>
         </JumpCenterpoint>
       </attached>
@@ -216,57 +287,5 @@
       </events>
     </EventDispatcher>
 
-    <?lua
-      dofile("includes/CuboidSpaceStation.lua")
-    ?>
-
-    <StaticEntity pitch=15>
-      <attached>
-        <MovableEntity rotationrate="-4.15786" rotationaxis="0,0,1">
-          <attached>
-            <StaticEntity position="-2500,0,0" yaw=90 pitch=90>
-              <attached>
-                <?lua
-                  createSpaceStationPar(0,2,1,2,1,4,1,50)
-                ?>
-              </attached>
-            </StaticEntity>
-          </attached>
-        </MovableEntity>
-      </attached>
-    </StaticEntity>
-
-    <StaticEntity position="0,1200,-200" yaw=50 pitch=60 roll=45>
-      <attached>
-        <Model scale=10 mesh="Carrier.mesh" />
-        <Model position="0,30,20" scale=10 mesh="pirate.mesh" roll="180" />
-        <Model position="-80,-30,20" scale=10 mesh="pirate.mesh" roll="180" />
-      </attached>
-    </StaticEntity>
-
-    <StaticEntity pitch=70>
-      <attached>
-        <MovableEntity rotationaxis="0,0,1" rotationrate=8.5974>
-          <attached>
-            <StaticEntity yaw=-90 pitch=0 roll=90 position="800,0,0">
-              <attached>
-                <Model position="0,0,0" scale=10 mesh="satellite.mesh" />
-                <MovableEntity position="-4,0,20" velocity="0,0,0" rotationaxis="0,0,1" rotationrate=50>
-                  <attached>
-                    <Model position="0,0,0" scale=10 mesh="satellitedish.mesh"/>
-                  </attached>
-                </MovableEntity>
-                <!--
-                <ParticleEmitter pitch=-135 roll=30 position="-14, 3.5,-2.5" source="Orxonox/thruster3" lifetime=2.0 loop=1 startdelay=3.0 />
-                <ParticleEmitter pitch=135 roll=30 position="-14, 3.5,-9" source="Orxonox/thruster3" lifetime=2.0 loop=1 startdelay=3.0 />
-                <ParticleEmitter pitch=-45 roll=30 position="-14,-3.5,-2.5" source="Orxonox/thruster3" lifetime=2.0 loop=1 startdelay=3.0 />
-                <ParticleEmitter pitch=45 roll=30 position="-14,-3.5,-9" source="Orxonox/thruster3" lifetime=2.0 loop=1 startdelay=3.0 />
-              -->
-              </attached>
-            </StaticEntity>
-          </attached>
-        </MovableEntity>
-      </attached>
-    </StaticEntity>
   </Scene>
 </Level>

Modified: code/branches/pickupsFS14/data/overlays/jumpHUD.oxo
===================================================================
--- code/branches/pickupsFS14/data/overlays/jumpHUD.oxo	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/data/overlays/jumpHUD.oxo	2014-05-22 13:05:46 UTC (rev 10074)
@@ -7,20 +7,21 @@
      textsize  = 0.06
      colour    = "1.0, 1.0, 1.0, 1.0"
      align     = "center"
+     showScore = true
+     showMessages = false
     />
 
-    <!--
-    <OverlayText
-     position  = "0.505, 0.05"
+    <JumpScore
+     position  = "0.5, 0.5"
      pickpoint = "0.0, 0.0"
      font      = "ShareTechMono"
-     textsize  = 0.06
-     colour    = "1.0, 1.0, 1.0, 1.0"
+     textsize  = 0.2
+     colour    = "1.0, 0.0, 0.0, 1.0"
      align     = "center"
+     gameOverText = "GAME OVER"
+     showScore = false
+     showMessages = true
+    />    
 
-     caption   = ":"
-    />
-    -->
-
   </OverlayGroup>
 </Template>

Modified: code/branches/pickupsFS14/src/modules/invader/InvaderWeapon.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/invader/InvaderWeapon.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/invader/InvaderWeapon.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -56,8 +56,11 @@
         RegisterObject(InvaderWeapon);
     }
 
-    InvaderWeapon::~InvaderWeapon(){}
+    InvaderWeapon::~InvaderWeapon()
+    {
 
+    }
+
     void InvaderWeapon::shot()
     {
         assert( this->getWeapon() && this->getWeapon()->getWeaponPack() && this->getWeapon()->getWeaponPack()->getWeaponSystem() && this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn() );

Modified: code/branches/pickupsFS14/src/modules/jump/CMakeLists.txt
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/CMakeLists.txt	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/CMakeLists.txt	2014-05-22 13:05:46 UTC (rev 10074)
@@ -12,6 +12,11 @@
   JumpEnemy.cc
   JumpFigure.cc
   JumpItem.cc
+  JumpSpring.cc
+  JumpRocket.cc
+  JumpShield.cc
+  JumpPropeller.cc
+  JumpBoots.cc
   JumpCenterpoint.cc
   JumpScore.cc
 END_BUILD_UNIT
@@ -23,5 +28,6 @@
   LINK_LIBRARIES
     orxonox
     overlays
+    weapons
   SOURCE_FILES ${JUMP_SRC_FILES}
 )

Modified: code/branches/pickupsFS14/src/modules/jump/Jump.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/Jump.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/Jump.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -52,6 +52,12 @@
 #include "JumpProjectile.h"
 #include "JumpEnemy.h"
 #include "JumpFigure.h"
+#include "JumpItem.h"
+#include "JumpSpring.h"
+#include "JumpRocket.h"
+#include "JumpPropeller.h"
+#include "JumpBoots.h"
+#include "JumpShield.h"
 
 #include "infos/PlayerInfo.h"
 
@@ -71,19 +77,14 @@
     {
         RegisterObject(Jump);
 
-        this->center_ = 0;
-        this->figure_ = 0;
-        this->camera = 0;
-        this->fakeAdded_ = false;
+        center_ = 0;
+        figure_ = 0;
+        camera = 0;
 
-        this->setHUDTemplate("JumpHUD");
+        setHUDTemplate("JumpHUD");
 
-        // Pre-set the timer, but don't start it yet.
-        this->starttimer_.setTimer(1.0, false, createExecutor(createFunctor(&Jump::startBall, this)));
-        this->starttimer_.stopTimer();
-
-        this->scoreLimit_ = 10;
-        this->setConfigValues();
+        scoreLimit_ = 10;
+        setConfigValues();
     }
 
     /**
@@ -92,49 +93,65 @@
     */
     Jump::~Jump()
     {
-        if (this->isInitialized())
+        if (isInitialized())
         {
-            this->cleanup();
+            cleanup();
         }
     }
 
     void Jump::tick(float dt)
     {
     	SUPER(Jump, tick, dt);
-
     	if (figure_ != NULL)
     	{
     		Vector3 figurePosition = figure_->getPosition();
     		Vector3 figureVelocity = figure_->getVelocity();
 
-    		if (figurePosition.z > totalScreenShift)
+    		float boundary = totalScreenShift+center_->getCameraOffset();
+
+    		if (figurePosition.z > boundary)
     		{
-    			screenShiftSinceLastUpdate += figurePosition.z - totalScreenShift;
-    			totalScreenShift = figurePosition.z;
+    			screenShiftSinceLastUpdate += figurePosition.z - boundary;
+    			totalScreenShift = figurePosition.z - center_->getCameraOffset();
 
                 // Falls noetig neue Platformen im neuen Bereich einfuegen
                 if (screenShiftSinceLastUpdate > center_->getSectionLength())
                 {
                 	screenShiftSinceLastUpdate -= center_->getSectionLength();
-                    addSection();
+                	if (sectionNumber_ > 2 && sectionNumber_%4 == 0 && rand()%2 == 0)
+                	{
+                		if (addAdventure(adventureNumber_) == false)
+						{
+                			addSection();
+						}
+                		else
+                		{
+                			++ adventureNumber_;
+                		}
+                	}
+                	else
+                	{
+                		addSection();
+                	}
                 }
     		}
 
     		// Spiel verloren wegen Ansturz?
-    		if (figurePosition.z < totalScreenShift - center_->getFieldDimension().y && figureVelocity.z < 0)
+    		if (figurePosition.z < totalScreenShift - center_->getFieldDimension().y + platformHeight_ && figureVelocity.z < 0)
     		{
     			end();
     		}
 
     		// Schiessen
+
     		if (figure_->fireSignal)
     		{
     			figure_->fireSignal = false;
-    			addProjectile(figurePosition.x, figurePosition.z, 0.0, 150.0);
+    			addProjectile(figurePosition.x, figurePosition.z + figure_->getPropellerPos());
     		}
 
 
-    		if (this->camera != NULL)
+    		if (camera != NULL)
 			{
 				Vector3 cameraPosition = Vector3(0, totalScreenShift, 0);
 				camera->setPosition(cameraPosition);
@@ -247,8 +264,52 @@
 			}
 		}
 
+		// Gegner, die zu weit unten oder abgeschossen sind entfernen
+		ObjectList<JumpEnemy>::iterator beginEnemy = ObjectList<JumpEnemy>::begin();
+		ObjectList<JumpEnemy>::iterator endEnemy = ObjectList<JumpEnemy>::end();
+		ObjectList<JumpEnemy>::iterator itEnemy = beginEnemy;
+		Vector3 enemyPosition;
 
+		while (itEnemy != endEnemy)
+		{
+			enemyPosition = itEnemy->getPosition();
+			if (enemyPosition.z < totalScreenShift - center_->getFieldDimension().y || itEnemy->dead_ == true)
+			{
+				ObjectList<JumpEnemy>::iterator temp = itEnemy;
+				++ itEnemy;
+				center_->detach(*temp);
+				temp->destroy();
+			}
+			else
+			{
+				++ itEnemy;
+			}
+		}
 
+		// Items, die zu weit unten sind entfernen
+		ObjectList<JumpItem>::iterator beginItem = ObjectList<JumpItem>::begin();
+		ObjectList<JumpItem>::iterator endItem = ObjectList<JumpItem>::end();
+		ObjectList<JumpItem>::iterator itItem = beginItem;
+		Vector3 itemPosition;
+
+		while (itItem != endItem)
+		{
+			itemPosition = itItem->getPosition();
+
+			WorldEntity* parent = itItem->getParent();
+
+			if (itItem->attachedToFigure_ == false && itemPosition.z < totalScreenShift - center_->getFieldDimension().y && parent == center_)
+			{
+				ObjectList<JumpItem>::iterator temp = itItem;
+				++ itItem;
+				center_->detach(*temp);
+				temp->destroy();
+			}
+			else
+			{
+				++ itItem;
+			}
+		}
     }
 
     void Jump::setConfigValues()
@@ -262,44 +323,28 @@
     */
     void Jump::cleanup()
     {
-		if (this->figure_ != NULL)
+		if (figure_ != NULL)
 		{
 			//this->figure_->destroy();
 			//this->figure_ = 0;
 		}
-		this->camera = 0;
+		camera = 0;
     }
 
-    /**
-    @brief
-        Starts the Jump minigame.
-    */
     void Jump::start()
     {
-        if (this->center_ != NULL) // There needs to be a JumpCenterpoint, i.e. the area the game takes place.
+        if (center_ != NULL) // There needs to be a JumpCenterpoint, i.e. the area the game takes place.
         {
-
-
-            // 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->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.
-			if (this->figure_ == NULL)
+			if (figure_ == NULL)
 			{
-				this->figure_ = new JumpFigure(this->center_->getContext());
-				this->figure_->addTemplate(this->center_->getFigureTemplate());
+				figure_ = new JumpFigure(center_->getContext());
+				figure_->addTemplate(center_->getFigureTemplate());
+				figure_->InitializeAnimation(center_->getContext());
 			}
 
-            // Attach the bats to the centerpoint and set the parameters as specified in the centerpoint, the bats are attached to.
-            this->center_->attach(this->figure_);
-            this->figure_->setPosition(-this->center_->getFieldDimension().x / 2, 0, 0);
-            this->figure_->setFieldDimension(this->center_->getFieldDimension());
+            center_->attach(figure_);
+            figure_->setPosition(0, 0, 0);
+            figure_->setFieldDimension(center_->getFieldDimension());
         }
         else // If no centerpoint was specified, an error is thrown and the level is exited.
         {
@@ -308,27 +353,25 @@
             return;
         }
 
-        // Start the timer. After it has expired the ball is started.
-        this->starttimer_.startTimer();
-
         // Set variable to temporarily force the player to spawn.
-        bool temp = this->bForceSpawn_;
-        this->bForceSpawn_ = true;
+        bool temp = bForceSpawn_;
+        bForceSpawn_ = true;
 
         // Call start for the parent class.
         Deathmatch::start();
 
         // Reset the variable.
-        this->bForceSpawn_ = temp;
+        bForceSpawn_ = temp;
 
-        if (this->figure_ != NULL)
+        if (figure_ != NULL)
         {
-        	this->camera = this->figure_->getCamera();
+        	camera = figure_->getCamera();
         }
 
         totalScreenShift = 0.0;
         screenShiftSinceLastUpdate = 0.0;
-        sectionNumber = 0;
+        sectionNumber_ = 0;
+        adventureNumber_ = 0;
 
         addStartSection();
         addSection();
@@ -350,25 +393,6 @@
 
     /**
     @brief
-        Spawns players, and fills the rest up with bots.
-    */
-    void Jump::spawnPlayersIfRequested()
-    {
-
-        // first spawn human players to assign always the left bat to the player in singleplayer
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (it->first->isHumanPlayer() && (it->first->isReadyToSpawn() || this->bForceSpawn_))
-                this->spawnPlayer(it->first);
-        // now spawn bots
-        /*
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (!it->first->isHumanPlayer() && (it->first->isReadyToSpawn() || this->bForceSpawn_))
-                this->spawnPlayer(it->first);
-        */
-    }
-
-    /**
-    @brief
         Spawns the input player.
     @param player
         The player to be spawned.
@@ -383,12 +407,6 @@
             player->startControl(this->figure_);
             this->players_[player].state_ = PlayerState::Alive;
         }
-        // If both bats are taken.
-        else
-        {
-            return;
-        }
-
     }
 
     /**
@@ -397,54 +415,7 @@
     */
     void Jump::playerScored(PlayerInfo* player, int score)
     {
-    	/*
-        Deathmatch::playerScored(player, score);
-        if (this->center_ != NULL) // If there is a centerpoint.
-        {
-            // Fire an event for the player that has scored, to be able to react to it in the level, e.g. by displaying fireworks.
-            if (player == this->getRightPlayer())
-                this->center_->fireEvent(FireEventName(JumpCenterpoint, right));
-            else if (player == this->getLeftPlayer())
-                this->center_->fireEvent(FireEventName(JumpCenterpoint, left));
 
-            // Also announce, that the player has scored.
-            if (player != NULL)
-                this->gtinfo_->sendAnnounceMessage(player->getName() + " scored");
-        }
-
-        // If there is a ball present, reset its position, velocity and acceleration.
-        if (this->ball_ != NULL)
-        {
-            this->ball_->setPosition(Vector3::ZERO);
-            this->ball_->setVelocity(Vector3::ZERO);
-            this->ball_->setAcceleration(Vector3::ZERO);
-            this->ball_->setSpeed(0);
-        }
-
-        // If there are bats reset them to the middle position.
-        if (this->figure_[0] != NULL && this->figure_[1] != NULL)
-        {
-            this->figure_[0]->setPosition(-this->center_->getFieldDimension().x / 2, 0, 0);
-            this->figure_[1]->setPosition( this->center_->getFieldDimension().x / 2, 0, 0);
-        }
-
-        // If a player gets enough points, he won the game -> end of game
-        PlayerInfo* winningPlayer = NULL;
-        if (this->getLeftPlayer() && this->getScore(this->getLeftPlayer()) >= scoreLimit_)
-            winningPlayer = this->getLeftPlayer();
-        else if (this->getRightPlayer() && this->getScore(this->getRightPlayer()) >= scoreLimit_)
-            winningPlayer = getLeftPlayerthis->getRightPlayer();
-
-        if (winningPlayer)
-        {
-             ChatManager::message(winningPlayer->getName() + " has won!");
-             this->end();
-        }
-
-        // Restart the timer to start the ball.
-        this->starttimer_.startTimer();
-
-        */
     }
 
     /**
@@ -480,85 +451,233 @@
 		{
     		newPlatform->addTemplate(platformTemplate);
     		newPlatform->setPosition(Vector3(xPosition, 0.0, zPosition));
-    		newPlatform->setFieldDimension(center_->getFieldDimension());
     		newPlatform->setFigure(this->figure_);
     		center_->attach(newPlatform);
 		}
     }
 
-    void Jump::addPlatformStatic(float xPosition, float zPosition)
+    JumpPlatformStatic* Jump::addPlatformStatic(float xPosition, float zPosition)
     {
-		if (fakeAdded_ == false && rand()%5 == 0)
-		{
-			addPlatformFake(xPosition, zPosition);
-		}
-		else
-		{
-	    	JumpPlatformStatic* newPlatform = new JumpPlatformStatic(center_->getContext());
-			addPlatform(newPlatform, center_->getPlatformStaticTemplate(), xPosition, zPosition);
-		}
+		JumpPlatformStatic* newPlatform = new JumpPlatformStatic(center_->getContext());
+		addPlatform(newPlatform, center_->getPlatformStaticTemplate(), xPosition, zPosition);
+
+		return newPlatform;
     }
 
-    void Jump::addPlatformHMove(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float speed)
+    JumpPlatformHMove* Jump::addPlatformHMove(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float speed)
     {
     	JumpPlatformHMove* newPlatform = new JumpPlatformHMove(center_->getContext());
 		newPlatform->setProperties(leftBoundary, rightBoundary, speed);
 		addPlatform(newPlatform, center_->getPlatformHMoveTemplate(), xPosition, zPosition);
+
+		return newPlatform;
     }
 
-    void Jump::addPlatformVMove(float xPosition, float zPosition, float lowerBoundary, float upperBoundary, float speed)
+    JumpPlatformVMove* Jump::addPlatformVMove(float xPosition, float zPosition, float lowerBoundary, float upperBoundary, float speed)
     {
     	JumpPlatformVMove* newPlatform = new JumpPlatformVMove(center_->getContext());
 		newPlatform->setProperties(lowerBoundary, upperBoundary, speed);
 		addPlatform(newPlatform, center_->getPlatformVMoveTemplate(), xPosition, zPosition);
+
+		return newPlatform;
     }
 
-    void Jump::addPlatformDisappear(float xPosition, float zPosition)
+    JumpPlatformDisappear* Jump::addPlatformDisappear(float xPosition, float zPosition)
     {
 		JumpPlatformDisappear* newPlatform = new JumpPlatformDisappear(center_->getContext());
 		newPlatform->setProperties(true);
 		addPlatform(newPlatform, center_->getPlatformDisappearTemplate(), xPosition, zPosition);
+
+		return newPlatform;
     }
 
-    void Jump::addPlatformTimer(float xPosition, float zPosition, float time, float variance)
+    JumpPlatformTimer* Jump::addPlatformTimer(float xPosition, float zPosition, float time, float variance)
     {
 		float additionalTime = (float)(rand()%100)/(100*variance) - variance/2;
 
     	JumpPlatformTimer* newPlatform = new JumpPlatformTimer(center_->getContext());
 		newPlatform->setProperties(time + additionalTime);
 		addPlatform(newPlatform, center_->getPlatformTimerTemplate(), xPosition, zPosition);
+
+		return newPlatform;
     }
 
-    void Jump::addPlatformFake(float xPosition, float zPosition)
+    JumpPlatformFake* Jump::addPlatformFake(float xPosition, float zPosition)
     {
-    	fakeAdded_ = true;
-
 		JumpPlatformFake* newPlatform = new JumpPlatformFake(center_->getContext());
 		addPlatform(newPlatform, center_->getPlatformFakeTemplate(), xPosition, zPosition);
 		newPlatform->setAngularVelocity(Vector3(0, 0, 2.0));
+
+		return newPlatform;
     }
 
 
-    void Jump::addProjectile(float xPosition, float zPosition, float xVelocity, float zVelocity)
+    void Jump::addProjectile(float xPosition, float zPosition)
     {
     	JumpProjectile* newProjectile = new JumpProjectile(center_->getContext());
     	if (newProjectile != NULL && center_ != NULL)
 		{
     		newProjectile->addTemplate(center_->getProjectileTemplate());
     		newProjectile->setPosition(Vector3(xPosition, 0.0, zPosition));
-    		newProjectile->setVelocity(Vector3(xVelocity, 0.0, zVelocity));
     		newProjectile->setFieldDimension(center_->getFieldDimension());
     		newProjectile->setFigure(this->figure_);
     		center_->attach(newProjectile);
 		}
     }
 
-    void Jump::addEnemy1(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
+    void Jump::addSpring(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
     {
+    	JumpSpring* newSpring = new JumpSpring(center_->getContext());
+    	if (newSpring != NULL && center_ != NULL)
+		{
+    		newSpring->addTemplate(center_->getSpringTemplate());
+    		newSpring->setPosition(Vector3(xPosition, 0.0, zPosition));
+    		newSpring->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+    		newSpring->setFigure(figure_);
+    		center_->attach(newSpring);
+		}
+    }
+
+    void Jump::addSpring(JumpPlatform* platform)
+    {
+    	JumpSpring* newSpring = new JumpSpring(center_->getContext());
+    	if (newSpring != NULL && center_ != NULL)
+		{
+    		newSpring->addTemplate(center_->getSpringTemplate());
+    		newSpring->setPosition(Vector3(0.0, 0.0, 0.0));
+    		newSpring->setProperties(-10.0, 10.0, -10.0, 10.0, 0.0, 0.0);
+    		newSpring->setFigure(figure_);
+    		platform->attach(newSpring);
+		}
+    }
+
+    void Jump::addRocket(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
+    {
+    	JumpRocket* newRocket = new JumpRocket(center_->getContext());
+    	if (newRocket != NULL && center_ != NULL)
+		{
+    		newRocket->addTemplate(center_->getRocketTemplate());
+    		newRocket->setPosition(Vector3(xPosition, 0.0, zPosition));
+    		newRocket->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+    		newRocket->setFigure(figure_);
+    		center_->attach(newRocket);
+		}
+    }
+
+    void Jump::addRocket(JumpPlatform* platform)
+    {
+    	JumpRocket* newRocket = new JumpRocket(center_->getContext());
+    	if (newRocket != NULL && center_ != NULL)
+		{
+    		newRocket->addTemplate(center_->getRocketTemplate());
+    		newRocket->setPosition(Vector3(0.0, 0.0, 0.0));
+    		newRocket->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    		newRocket->setFigure(figure_);
+    		platform->attach(newRocket);
+		}
+    }
+
+    void Jump::addPropeller(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
+    {
+    	JumpPropeller* newPropeller = new JumpPropeller(center_->getContext());
+    	if (newPropeller != NULL && center_ != NULL)
+		{
+    		newPropeller->addTemplate(center_->getPropellerTemplate());
+    		newPropeller->setPosition(Vector3(xPosition, 0.0, zPosition));
+    		newPropeller->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+    		newPropeller->setFigure(figure_);
+    		center_->attach(newPropeller);
+		}
+    }
+
+    void Jump::addPropeller(JumpPlatform* platform)
+    {
+    	JumpPropeller* newPropeller = new JumpPropeller(center_->getContext());
+    	if (newPropeller != NULL && center_ != NULL)
+		{
+    		newPropeller->addTemplate(center_->getPropellerTemplate());
+    		newPropeller->setPosition(Vector3(0.0, 0.0, 0.0));
+    		newPropeller->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    		newPropeller->setFigure(figure_);
+    		platform->attach(newPropeller);
+		}
+    }
+
+    void Jump::addBoots(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
+    {
+    	JumpBoots* newBoots = new JumpBoots(center_->getContext());
+    	if (newBoots != NULL && center_ != NULL)
+		{
+    		newBoots->addTemplate(center_->getBootsTemplate());
+    		newBoots->setPosition(Vector3(xPosition, 0.0, zPosition));
+    		newBoots->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+    		newBoots->setFigure(figure_);
+    		center_->attach(newBoots);
+		}
+    }
+
+    void Jump::addBoots(JumpPlatform* platform)
+    {
+    	JumpBoots* newBoots = new JumpBoots(center_->getContext());
+    	if (newBoots != NULL && center_ != NULL)
+		{
+    		newBoots->addTemplate(center_->getBootsTemplate());
+    		newBoots->setPosition(Vector3(0.0, 0.0, 0.0));
+    		newBoots->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    		newBoots->setFigure(figure_);
+    		platform->attach(newBoots);
+		}
+    }
+
+    void Jump::addShield(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
+    {
+    	JumpShield* newShield = new JumpShield(center_->getContext());
+    	if (newShield != NULL && center_ != NULL)
+		{
+    		newShield->addTemplate(center_->getShieldTemplate());
+    		newShield->setPosition(Vector3(xPosition, 0.0, zPosition));
+    		newShield->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+    		newShield->setFigure(figure_);
+    		center_->attach(newShield);
+		}
+    }
+
+    void Jump::addShield(JumpPlatform* platform)
+    {
+    	JumpShield* newShield = new JumpShield(center_->getContext());
+    	if (newShield != NULL && center_ != NULL)
+		{
+    		newShield->addTemplate(center_->getShieldTemplate());
+    		newShield->setPosition(Vector3(0.0, 0.0, 0.0));
+    		newShield->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    		newShield->setFigure(figure_);
+    		platform->attach(newShield);
+		}
+    }
+
+    void Jump::addEnemy(int type, float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
+    {
     	JumpEnemy* newEnemy = new JumpEnemy(center_->getContext());
     	if (newEnemy != NULL && center_ != NULL)
 		{
-    		newEnemy->addTemplate(center_->getEnemy1Template());
+    		switch (type)
+    		{
+    		case 1:
+    			newEnemy->addTemplate(center_->getEnemy1Template());
+    			break;
+    		case 2:
+    			newEnemy->addTemplate(center_->getEnemy2Template());
+    			break;
+    		case 3:
+    			newEnemy->addTemplate(center_->getEnemy3Template());
+    			break;
+    		case 4:
+    			newEnemy->addTemplate(center_->getEnemy4Template());
+    			break;
+    		default:
+    			return;
+    		}
+
     		newEnemy->setPosition(Vector3(xPosition, 0.0, zPosition));
     		newEnemy->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
     		newEnemy->setFieldDimension(center_->getFieldDimension());
@@ -572,12 +691,19 @@
 		JumpPlatform* newPlatform;
 
 		float sectionLength = center_->getSectionLength();
-		float platformLength = center_->getPlatformLength();
 
-		for (float xPosition = -center_->getFieldDimension().x; xPosition <= center_->getFieldDimension().x; xPosition += platformLength)
+		newPlatform = new JumpPlatformStatic(center_->getContext());
+		addPlatform(newPlatform, center_->getPlatformStaticTemplate(), 0.0, -0.05*sectionLength);
+
+		platformWidth_ = newPlatform->getWidth();
+		platformHeight_ = newPlatform->getHeight();
+
+		for (float xPosition = platformWidth_; xPosition <= center_->getFieldDimension().x; xPosition += platformWidth_)
 		{
 			newPlatform = new JumpPlatformStatic(center_->getContext());
 			addPlatform(newPlatform, center_->getPlatformStaticTemplate(), xPosition, -0.05*sectionLength);
+			newPlatform = new JumpPlatformStatic(center_->getContext());
+			addPlatform(newPlatform, center_->getPlatformStaticTemplate(), -xPosition, -0.05*sectionLength);
 		}
     }
 
@@ -585,155 +711,478 @@
     {
         float fieldWidth = center_->getFieldDimension().x;
         float sectionLength = center_->getSectionLength();
-        float platformLength = center_->getPlatformLength();
+        float sectionBegin = sectionNumber_ * sectionLength;
+        float sectionEnd = (1 + sectionNumber_) * sectionLength;
 
-        float sectionBegin = sectionNumber * sectionLength;
-        float sectionEnd = (1.0 + sectionNumber) * sectionLength;
+        int numI = 6;
+        int numJ = 4;
 
-		int randPos1 = rand()%10;
-		int randPos2 = rand()%10;
-		int randPos3 = rand()%10;
-		int randPos4 = rand()%10;
+    	enum PlatformType
+    	{
+    		PLATFORM_EMPTY, PLATFORM_STATIC, PLATFORM_HMOVE, PLATFORM_VMOVE, PLATFORM_DISAPPEAR, PLATFORM_TIMER, PLATFORM_FAKE
+    	};
 
-		if (rand()%5 == 0)
+    	enum ItemType
+    	{
+    		ITEM_NOTHING, ITEM_SPRING, ITEM_PROPELLER, ITEM_ROCKET, ITEM_BOOTS, ITEM_SHIELD
+    	};
+
+        struct PlatformMatrix
+        {
+        	PlatformType type;
+            bool done;
+        } matrix[numI][numJ];
+
+
+		for (int i = 0; i < numI; ++i)
 		{
-			addEnemy1(randomXPosition(), sectionBegin + sectionLength/10, -fieldWidth, fieldWidth, sectionBegin + sectionLength/10, sectionBegin + sectionLength/10, 5.0, 0.0);
+			for (int j = 0; j < numJ; ++j)
+			{
+				matrix[i][j].type = PLATFORM_EMPTY;
+				matrix[i][j].done = false;
+			}
 		}
+		PlatformType platformtype1;
+		PlatformType platformtype2;
+		ItemType itemType = ITEM_NOTHING;
 
-        switch (rand()%12)
+	    if (rand()%2 == 0)
+	    {
+	    	itemType = ITEM_SPRING;
+	    }
+	    else if (rand()%2 == 0 && sectionNumber_ > 3)
+		switch(rand()%4)
 		{
 		case 0:
-			// Doppelt statisch
-			for (int i = 0; i < 10; ++i)
-			{
-				for (int j = 0; j < 2; ++j)
-				{
-					addPlatformStatic(randomXPosition(2, j), sectionBegin + i*sectionLength/10);
-				}
-			}
+			itemType = ITEM_PROPELLER;
 			break;
 		case 1:
-			// Dreifach statisch
-			for (int i = 0; i < 10; ++i)
-			{
-				for (int j = 0; j < 3; ++j)
-				{
-					addPlatformStatic(randomXPosition(3, j), sectionBegin + i*sectionLength/10);
-				}
-			}
+			itemType = ITEM_ROCKET;
 			break;
 		case 2:
-			// statisch mit 1 horizontal
-			for (int i = 0; i < 10; ++i)
-			{
-				if (i == randPos1)
-				{
-					addPlatformHMove(randomXPosition(), sectionBegin + i*sectionLength/10, -fieldWidth, fieldWidth, 30.0);
-				}
-				else
-				{
-					addPlatformStatic(randomXPosition(), sectionBegin + i*sectionLength/10);
-				}
-			}
+			itemType = ITEM_BOOTS;
 			break;
 		case 3:
-			// statisch mit 2 horizontal
-			for (int i = 0; i < 10; ++i)
-			{
-				if (i == randPos1 || i == randPos2)
-				{
-					addPlatformHMove(randomXPosition(), sectionBegin + i*sectionLength/10, -fieldWidth, fieldWidth, 30.0);
-				}
-				else
-				{
-					addPlatformStatic(randomXPosition(), sectionBegin + i*sectionLength/10);
-				}
-			}
+			itemType = ITEM_SHIELD;
 			break;
-		case 4:
-			// statisch mit 3 horizontal
-			for (int i = 0; i < 10; ++i)
+		default:
+			break;
+		}
+
+		switch((sectionNumber_ > 28) ? rand()%29 : rand()%(sectionNumber_+1))
+	    {
+	    case 0:
+	        platformtype1 = PLATFORM_STATIC;
+	        platformtype2 = PLATFORM_STATIC;
+	        break;
+	    case 1:
+	        platformtype1 = PLATFORM_STATIC;
+	        platformtype2 = PLATFORM_STATIC;
+	        break;
+	    case 2:
+	      platformtype1 = PLATFORM_STATIC;
+	      platformtype2 = PLATFORM_HMOVE;
+	      break;
+	    case 3:
+	      platformtype1 = PLATFORM_STATIC;
+	      platformtype2 = PLATFORM_DISAPPEAR;
+	      break;
+	    case 4:
+	      platformtype1 = PLATFORM_STATIC;
+	      platformtype2 = PLATFORM_VMOVE;
+	      break;
+	    case 5:
+	      platformtype1 = PLATFORM_STATIC;
+	      platformtype2 = PLATFORM_TIMER;
+	      break;
+	    case 6:
+	      platformtype1 = PLATFORM_HMOVE;
+	      platformtype2 = PLATFORM_STATIC;
+	      break;
+	    case 7:
+	      platformtype1 = PLATFORM_HMOVE;
+	      platformtype2 = PLATFORM_HMOVE;
+	      break;
+	    case 8:
+	      platformtype1 = PLATFORM_HMOVE;
+	      platformtype2 = PLATFORM_HMOVE;
+	      break;
+	    case 9:
+	      platformtype1 = PLATFORM_HMOVE;
+	      platformtype2 = PLATFORM_DISAPPEAR;
+	      break;
+	    case 10:
+	      platformtype1 = PLATFORM_HMOVE;
+	      platformtype2 = PLATFORM_VMOVE;
+	      break;
+	    case 11:
+	      platformtype1 = PLATFORM_HMOVE;
+	      platformtype2 = PLATFORM_TIMER;
+	      break;
+	    case 12:
+	      platformtype1 = PLATFORM_DISAPPEAR;
+	      platformtype2 = PLATFORM_STATIC;
+	      break;
+	    case 13:
+	      platformtype1 = PLATFORM_DISAPPEAR;
+	      platformtype2 = PLATFORM_HMOVE;
+	      break;
+	    case 14:
+	      platformtype1 = PLATFORM_DISAPPEAR;
+	      platformtype2 = PLATFORM_DISAPPEAR;
+	      break;
+	    case 15:
+	      platformtype1 = PLATFORM_DISAPPEAR;
+	      platformtype2 = PLATFORM_DISAPPEAR;
+	      break;
+	    case 16:
+	      platformtype1 = PLATFORM_DISAPPEAR;
+	      platformtype2 = PLATFORM_VMOVE;
+	      break;
+	    case 17:
+	      platformtype1 = PLATFORM_DISAPPEAR;
+	      platformtype2 = PLATFORM_TIMER;
+	      break;
+	    case 18:
+	      platformtype1 = PLATFORM_VMOVE;
+	      platformtype2 = PLATFORM_STATIC;
+	      break;
+	    case 19:
+	      platformtype1 = PLATFORM_VMOVE;
+	      platformtype2 = PLATFORM_HMOVE;
+	      break;
+	    case 20:
+	      platformtype1 = PLATFORM_VMOVE;
+	      platformtype2 = PLATFORM_DISAPPEAR;
+	      break;
+	    case 21:
+	      platformtype1 = PLATFORM_VMOVE;
+	      platformtype2 = PLATFORM_VMOVE;
+	      break;
+	    case 22:
+	      platformtype1 = PLATFORM_VMOVE;
+	      platformtype2 = PLATFORM_VMOVE;
+	      break;
+	    case 23:
+	      platformtype1 = PLATFORM_VMOVE;
+	      platformtype2 = PLATFORM_TIMER;
+	      break;
+	    case 24:
+	      platformtype1 = PLATFORM_TIMER;
+	      platformtype2 = PLATFORM_STATIC;
+	      break;
+	    case 25:
+	      platformtype1 = PLATFORM_TIMER;
+	      platformtype2 = PLATFORM_HMOVE;
+	      break;
+	    case 26:
+	      platformtype1 = PLATFORM_TIMER;
+	      platformtype2 = PLATFORM_DISAPPEAR;
+	      break;
+	    case 27:
+	        platformtype1 = PLATFORM_TIMER;
+	        platformtype2 = PLATFORM_VMOVE;
+	        break;
+	    case 28:
+	        platformtype1 = PLATFORM_TIMER;
+	        platformtype2 = PLATFORM_TIMER;
+	        break;
+	    default:
+	        platformtype1 = PLATFORM_TIMER;
+	        platformtype2 = PLATFORM_TIMER;
+	        break;
+	    }
+
+	    // Fill Matrix with selected platform types
+	    for (int i = 0; i < numI; ++ i)
+	    {
+			  for (int j = 0; j < numJ; ++ j)
+			  {
+					if (rand()%(sectionNumber_+1) == 0)
+					{
+					    matrix[i][j].type = platformtype1;
+					}
+					else
+					{
+						matrix[i][j].type = platformtype2;
+					}
+					matrix[i][j].done = false;
+			  }
+	    }
+
+	    // Delete some platforms or replace them with fake platforms
+	    if (platformtype1 == platformtype2 && sectionNumber_ > 10)
+	    {
+	        int j = rand()%numJ;
+			if (rand()%2 == 0)
 			{
-				if (i == randPos1 || i == randPos2 || i == randPos3)
+				for (int i = 0; i <= j; ++ i)
 				{
-					addPlatformHMove(randomXPosition(), sectionBegin + i*sectionLength/10, -fieldWidth, fieldWidth, 30.0);
+				    matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
 				}
-				else
-				{
-					addPlatformStatic(randomXPosition(), sectionBegin + i*sectionLength/10);
-				}
 			}
-			break;
-		case 5:
-			// statisch mit 4 horizontal
-			for (int i = 0; i < 10; ++i)
+			else
 			{
-				if (i == randPos1 || i == randPos2 || i == randPos3 || i == randPos4)
+			    for (int i = 0; i <= j; ++ i)
 				{
-					addPlatformHMove(randomXPosition(), sectionBegin + i*sectionLength/10, -fieldWidth, fieldWidth, 30.0);
+				      matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
 				}
-				else
-				{
-					addPlatformStatic(randomXPosition(), sectionBegin + i*sectionLength/10);
-				}
 			}
-			break;
-			// Einfach horizontal
-		case 6:
-			for (int i = 0; i < 10; ++i)
+	    }
+
+	    std::vector<JumpPlatform*> platformList;
+
+	    for (int i = 0; i < numI; ++ i)
+	    {
+	        for (int j = 0; j < numJ; ++ j)
+	        {
+	            if (matrix[i][j].done == false)
+	            {
+	            	float xPosition = 0.0;
+	            	float zPosition = 0.0;
+			    	float leftBoundary = 0.0;
+			    	float rightBoundary = 0.0;
+			    	float lowerBoundary = 0.0;
+			    	float upperBoundary = 0.0;
+			    	float xVelocity = 0.0;
+			    	float zVelocity = 0.0;
+
+	            	switch(matrix[i][j].type)
+				    {
+				    case PLATFORM_EMPTY:
+					    matrix[i][j].done = true;
+					    break;
+				    case PLATFORM_STATIC:
+						xPosition = randomXPosition(numJ, j);
+						zPosition = sectionBegin + i*sectionLength/numI;
+						platformList.push_back(addPlatformStatic(xPosition, zPosition));
+						matrix[i][j].done = true;
+					break;
+				    case PLATFORM_FAKE:
+						xPosition = randomXPosition(numJ, j);
+						zPosition = sectionBegin + i*sectionLength/numI;
+						platformList.push_back(addPlatformFake(xPosition, zPosition));
+					    matrix[i][j].done = true;
+					break;
+				    case PLATFORM_TIMER:
+						xPosition = randomXPosition(numJ, j);
+						zPosition = sectionBegin + i*sectionLength/numI;
+						platformList.push_back(addPlatformTimer(xPosition, zPosition, 10.0, 1.5));
+					    matrix[i][j].done = true;
+					break;
+				    case PLATFORM_DISAPPEAR:
+						xPosition = randomXPosition(numJ, j);
+						zPosition = sectionBegin + i*sectionLength/numI;
+						platformList.push_back(addPlatformDisappear(xPosition, zPosition));
+					    matrix[i][j].done = true;
+					break;
+				    case PLATFORM_HMOVE:
+				    	xVelocity = randomSpeed();
+					    if (j <= numJ-3 && matrix[i][j+1].type == PLATFORM_HMOVE && matrix[i][j+2].type == PLATFORM_HMOVE && rand()%2 == 0)
+					    {
+					    	leftBoundary = randomXPositionLeft(numJ, j);
+					    	rightBoundary = randomXPositionRight(numJ, j+2);
+					    	xPosition = randomPosition(leftBoundary, rightBoundary);
+							zPosition = sectionBegin + i*sectionLength/numI;
+							platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
+					        matrix[i][j].done = true;
+					        matrix[i][j+1].done = true;
+					        matrix[i][j+2].done = true;
+					    }
+					    else if (j <= numJ-2 && matrix[i][j+1].type == PLATFORM_HMOVE && rand()%2 == 0)
+					    {
+					    	leftBoundary = randomXPositionLeft(numJ, j);
+					    	rightBoundary = randomXPositionRight(numJ, j+1);
+					    	xPosition = randomPosition(leftBoundary, rightBoundary);
+							zPosition = sectionBegin + i*sectionLength/numI;
+							platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
+					        matrix[i][j].done = true;
+					        matrix[i][j+1].done = true;
+					    }
+					    else
+					    {
+					    	leftBoundary = randomXPositionLeft(numJ, j);
+					    	rightBoundary = randomXPositionRight(numJ, j);
+					    	xPosition = randomPosition(leftBoundary, rightBoundary);
+							zPosition = sectionBegin + i*sectionLength/numI;
+							platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
+					        matrix[i][j].done = true;
+					    }
+					    break;
+				    case PLATFORM_VMOVE:
+				    	zVelocity = randomSpeed();
+					    if (i <= numI-3 && matrix[i+1][j].type == PLATFORM_VMOVE && matrix[i+2][j].type == PLATFORM_VMOVE && rand()%2 == 0)
+					    {
+					    	lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
+					    	upperBoundary = randomZPositionUpper(numI, i+2, sectionBegin, sectionEnd);
+					    	zPosition = randomPosition(lowerBoundary, upperBoundary);
+					    	xPosition = randomXPosition(numJ, j);
+					    	platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
+					        matrix[i][j].done = true;
+					        matrix[i+1][j].done = true;
+					        matrix[i+2][j].done = true;
+					    }
+					    else if (i <= numI-2 && matrix[i+1][j].type == PLATFORM_VMOVE && rand()%2 == 0)
+					    {
+					    	lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
+					    	upperBoundary = randomZPositionUpper(numI, i+1, sectionBegin, sectionEnd);
+					    	zPosition = randomPosition(lowerBoundary, upperBoundary);
+					    	xPosition = randomXPosition(numJ, j);
+					    	platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
+					        matrix[i][j].done = true;
+					        matrix[i+1][j].done = true;
+					    }
+					    else
+					    {
+					    	lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
+					    	upperBoundary = randomZPositionUpper(numI, i, sectionBegin, sectionEnd);
+					    	zPosition = randomPosition(lowerBoundary, upperBoundary);
+					    	xPosition = randomXPosition(numJ, j);
+					    	platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
+					        matrix[i][j].done = true;
+					    }
+					    break;
+				    default:
+				    	// ERROR
+				    	break;
+
+	                }
+
+					/*if (platformtype1 != PLATFORM_TIMER && platformtype2 != PLATFORM_TIMER)
+					{
+						switch (itemType)
+						{
+						case ITEM_SPRING:
+							addSpring(xPosition, zPosition, leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+							itemType = ITEM_NOTHING;
+							break;
+						case ITEM_ROCKET:
+							addRocket(xPosition, zPosition, leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+							itemType = ITEM_NOTHING;
+							break;
+						case ITEM_PROPELLER:
+							addPropeller(xPosition, zPosition, leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+							itemType = ITEM_NOTHING;
+							break;
+						case ITEM_BOOTS:
+							addBoots(xPosition, zPosition, leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+							itemType = ITEM_NOTHING;
+							break;
+						case ITEM_SHIELD:
+							addShield(xPosition, zPosition, leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+							itemType = ITEM_NOTHING;
+							break;
+						default:
+							// ERROR
+							break;
+						}
+					}*/
+	            }
+	        }
+	    }
+
+	    //Add items
+    	int numNewPlatforms = platformList.size();
+
+    	if (numNewPlatforms > 0)
+    	{
+    		JumpPlatform* itemPlatform = platformList[rand()%numNewPlatforms];
+
+			switch (ITEM_BOOTS)
 			{
-				addPlatformHMove(randomXPosition(), sectionBegin + i*sectionLength/10, -fieldWidth, fieldWidth, 30.0);
+			case ITEM_SPRING:
+				addSpring(itemPlatform);
+				break;
+			case ITEM_ROCKET:
+				addRocket(itemPlatform);
+				break;
+			case ITEM_PROPELLER:
+				addPropeller(itemPlatform);
+				break;
+			case ITEM_BOOTS:
+				addBoots(itemPlatform);
+				break;
+			case ITEM_SHIELD:
+				addShield(itemPlatform);
+				break;
+			default:
+				break;
 			}
-			break;
-			// Doppelt horizontal
-		case 7:
-			for (int i = 0; i < 10; ++i)
+    	}
+
+        if (sectionNumber_ >= 5 && rand()%3 == 0)
+        {
+        	//  BEWEGUNG Verbessern, Grenzen anpassen !!!!!!!! Auch Vertikale Bewegung zulassen
+
+
+    	    switch(rand()%4)
+    		{
+            case 0:
+            	addEnemy(1, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth, fieldWidth, sectionBegin, sectionBegin + sectionLength, 5.0, 0.0);
+            	break;
+            case 1:
+            	addEnemy(2, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth, fieldWidth, sectionBegin, sectionBegin + sectionLength, 5.0, 0.0);
+            	break;
+            case 2:
+            	addEnemy(3, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth, fieldWidth, sectionBegin, sectionBegin + sectionLength, 5.0, 0.0);
+            	break;
+            case 3:
+            	addEnemy(4, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth, fieldWidth, sectionBegin, sectionBegin + sectionLength, 5.0, 0.0);
+            	break;
+    		}
+        }
+		++ sectionNumber_;
+    }
+
+    bool Jump::addAdventure(int number)
+    {
+        float fieldWidth = center_->getFieldDimension().x;
+        float sectionLength = center_->getSectionLength();
+        float sectionBegin = sectionNumber_ * sectionLength;
+        sectionLength *= 2;
+
+        switch(number)
+        {
+        case 0:
 			{
-					float mediumPos = randomXPosition(3, 1);
-					addPlatformHMove(randomXPosition(3, 0), sectionBegin + i*sectionLength/10, -fieldWidth, mediumPos - platformLength/2, 30.0);
-					addPlatformHMove(randomXPosition(3, 2), sectionBegin + i*sectionLength/10, mediumPos+platformLength/2, fieldWidth, 30.0);
+				int numI = 10;
+				for (int i = 0; i < numI; ++ i)
+				{
+					addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+i*sectionLength/numI);
+				}
+				break;
 			}
-			break;
-			// Einfach vertikal
-		case 8:
-			for (int i = 0; i < 7; ++i)
+        case 1:
+		{
+			int numI = 7;
+
+			addPlatformStatic(0.0, sectionBegin);
+			for (int i = 1; i < numI; ++ i)
 			{
-				addPlatformVMove(-fieldWidth + i*fieldWidth*2/10, randomYPosition(sectionBegin, sectionEnd), sectionBegin, sectionEnd, 20.0);
+				addPlatformStatic((fieldWidth-platformWidth_/2)*i/numI, sectionBegin+i*sectionLength/numI);
+				addPlatformStatic(-(fieldWidth-platformWidth_/2)*i/numI, sectionBegin+i*sectionLength/numI);
 			}
 			break;
-			// Doppelt vertikal
-		case 9:
-			for (int i = 0; i < 14; ++i)
+		}
+        case 2:
 			{
-				addPlatformVMove(-fieldWidth + i*fieldWidth*2/10, randomYPosition(sectionBegin, sectionEnd), sectionBegin, sectionEnd, 20.0);
-			}
-			break;
-			// Doppelt verschwindend
-		case 10:
-			for (int i = 0; i < 10; ++i)
-			{
-				for (int j = 0; j < 2; ++j)
+				int numI = 5;
+				for (int i = 0; i < numI; ++ i)
 				{
-					addPlatformDisappear(randomXPosition(2, j), randomYPosition(sectionBegin, sectionEnd));
+					addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin);
+					addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+sectionLength/5);
+					addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+sectionLength*2/5);
+					addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+sectionLength*3/5);
+					addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+sectionLength*4/5);
+					addEnemy(4, (2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+sectionLength/2, -fieldWidth, fieldWidth, sectionBegin, sectionBegin + sectionLength, 0.0, 0.0);
 				}
+				break;
 			}
-			break;
-			// Doppelt Timer
-		case 11:
-			for (int i = 0; i < 10; ++i)
-			{
-				for (int j = 0; j < 2; ++j)
-				{
-					addPlatformTimer(randomXPosition(2, j), randomYPosition(sectionBegin, sectionEnd), 6.0, 1.5);
-				}
-			}
-			break;
-		}
-		orxout() << "new section added with number "<< sectionNumber << endl;
-
-		fakeAdded_ = false;
-
-		++ sectionNumber;
+        default:
+        	return false;
+        }
+        sectionNumber_ +=2;
+        return true;
     }
 
     float Jump::randomXPosition()
@@ -745,23 +1194,89 @@
 
     float Jump::randomXPosition(int totalColumns, int culomn)
     {
-    	float fieldWidth = center_->getFieldDimension().x;
+    	float fieldWidth = center_->getFieldDimension().x; //Width of the half field
 
-    	float width = 2*fieldWidth/totalColumns;
-    	float leftBound = culomn*width-fieldWidth;
-    	float platformLength = center_->getPlatformLength();
+    	float halfWidth = fieldWidth/totalColumns; //Width of a half column
+    	float leftBound = culomn*halfWidth*2-fieldWidth; //Left beginning of the column
+    	float rightBound = leftBound + 2*halfWidth;
 
-    	return (float)(rand()%(int)(width-platformLength)) + leftBound + platformLength/2;
+    	return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
     }
 
-    float Jump::randomYPosition(float lowerBoundary, float upperBoundary)
+    float Jump::randomXPositionLeft(int totalColumns, int culomn)
     {
+    	float fieldWidth = center_->getFieldDimension().x; //Width of the half field
+
+    	float halfWidth = fieldWidth/totalColumns; //Width of a half column
+    	float leftBound = culomn*halfWidth*2-fieldWidth; //LeftBeginning of the column
+    	float rightBound = leftBound + 2*halfWidth/3;
+
+    	return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
+    }
+
+    float Jump::randomXPositionRight(int totalColumns, int culomn)
+    {
+    	float fieldWidth = center_->getFieldDimension().x; //Width of the half field
+
+    	float halfWidth = fieldWidth/totalColumns; //Width of a half column
+    	float rightBound = (culomn+1)*halfWidth*2-fieldWidth;
+    	float leftBound = rightBound - 2*halfWidth/3;
+    	return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
+    }
+
+    float Jump::randomZPosition(int totalRows, int row, float sectionBegin, float SectionEnd)
+    {
+    	float fieldHeight = SectionEnd - sectionBegin; //Heigt of the half field
+    	float halfHeight = fieldHeight/totalRows; //Height of a half row
+    	float lowerBound = row*halfHeight*2+sectionBegin; //Lower beginning of the row
+    	float upperBound = lowerBound + 2*halfHeight;
+
+    	return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
+    }
+
+    float Jump::randomZPositionLower(int totalRows, int row, float sectionBegin, float SectionEnd)
+    {
+    	float fieldHeight = SectionEnd - sectionBegin; //Heigt of the half field
+    	float rowHeight = fieldHeight/totalRows; //Height of a row
+    	float lowerBound = row*rowHeight+sectionBegin; //Lower beginning of the row
+    	float upperBound = lowerBound + rowHeight/3;
+
+    	return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
+    }
+
+    float Jump::randomZPositionUpper(int totalRows, int row, float sectionBegin, float SectionEnd)
+    {
+    	float fieldHeight = SectionEnd - sectionBegin; //Heigt of the half field
+    	float rowHeight = fieldHeight/totalRows; //Height of a row
+    	float lowerBound = (row+1)*rowHeight+sectionBegin; //Upper end of the row
+    	float upperBound = lowerBound - rowHeight/3;
+
+    	return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
+    }
+
+    float Jump::randomPosition(float lowerBoundary, float upperBoundary)
+    {
+    	if (lowerBoundary >= upperBoundary)
+    	{
+    		return (lowerBoundary + upperBoundary)/2;
+    	}
+
     	return (float)(rand()%(int)(100*(upperBoundary - lowerBoundary)))/100 + lowerBoundary;
     }
 
+    float Jump::randomSpeed()
+    {
+    	float platformSpeed = center_->getPlatformSpeed();
+    	return randomPosition(0.5*platformSpeed, 1.5*platformSpeed);
+    }
+
     int Jump::getScore(PlayerInfo* player) const
     {
-        return sectionNumber - 2;
+        return sectionNumber_ - 2;
     }
 
+    bool Jump::getDead(PlayerInfo* player) const
+    {
+        return figure_->dead_;
+    }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/Jump.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/Jump.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/Jump.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -80,52 +80,69 @@
             virtual void playerScored(PlayerInfo* player, int score = 1); //!< Is called when the player scored.
 
             int getScore(PlayerInfo* player) const;
+            bool getDead(PlayerInfo* player) const;
 
             /**
             @brief Set the JumpCenterpoint (the playing field).
             @param center A pointer to the JumpCenterpoint to be set.
             */
             void setCenterpoint(JumpCenterpoint* center)
-                { this->center_ = center; }
+                { center_ = center; }
             void setConfigValues(); //!< Makes scoreLimit configurable.
 
             PlayerInfo* getPlayer() const; //!< Get the left player.
 
         protected:
-            virtual void spawnPlayersIfRequested(); //!< Spawns players, and fills the rest up with bots.
-
             void startBall(); //!< Starts the ball with some default speed.
             void cleanup(); //!< Cleans up the Gametype by destroying the ball and the bats.
 
             virtual void addPlatform(JumpPlatform* newPlatform, std::string platformTemplate, float xPosition, float zPosition);
 
-            virtual void addPlatformStatic(float xPosition, float zPosition);
-            virtual void addPlatformHMove(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float speed);
-            virtual void addPlatformVMove(float xPosition, float zPosition, float lowerBoundary, float upperBoundary, float speed);
-            virtual void addPlatformDisappear(float xPosition, float zPosition);
-            virtual void addPlatformTimer(float xPosition, float zPosition, float time, float variance);
-            virtual void addPlatformFake(float xPosition, float zPosition);
-            virtual void addProjectile(float xPosition, float zPosition, float xVelocity, float zVelocity);
-            virtual void addEnemy1(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity);
+            virtual JumpPlatformStatic* addPlatformStatic(float xPosition, float zPosition);
+            virtual JumpPlatformHMove* addPlatformHMove(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float speed);
+            virtual JumpPlatformVMove* addPlatformVMove(float xPosition, float zPosition, float lowerBoundary, float upperBoundary, float speed);
+            virtual JumpPlatformDisappear* addPlatformDisappear(float xPosition, float zPosition);
+            virtual JumpPlatformTimer* addPlatformTimer(float xPosition, float zPosition, float time, float variance);
+            virtual JumpPlatformFake* addPlatformFake(float xPosition, float zPosition);
+            virtual void addProjectile(float xPosition, float zPosition);
+            virtual void addEnemy(int type, float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity);
+            virtual void addSpring(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity);
+            virtual void addSpring(JumpPlatform* platform);
+            virtual void addRocket(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity);
+            virtual void addRocket(JumpPlatform* platform);
+            virtual void addPropeller(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity);
+            virtual void addPropeller(JumpPlatform* platform);
+            virtual void addBoots(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity);
+            virtual void addBoots(JumpPlatform* platform);
+            virtual void addShield(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity);
+            virtual void addShield(JumpPlatform* platform);
 
             virtual void addStartSection();
             virtual void addSection();
+            virtual bool addAdventure(int number);
 
             virtual float randomXPosition();
             virtual float randomXPosition(int totalColumns, int culomn);
-            virtual float randomYPosition(float lowerBoundary, float upperBoundary);
+            virtual float randomXPositionLeft(int totalColumns, int culomn);
+            virtual float randomXPositionRight(int totalColumns, int culomn);
+            virtual float randomZPosition(int totalRows, int row, float sectionBegin, float SectionEnd);
+            virtual float randomZPositionLower(int totalRows, int row, float sectionBegin, float SectionEnd);
+            virtual float randomZPositionUpper(int totalRows, int row, float sectionBegin, float SectionEnd);
 
+            virtual float randomPosition(float lowerBoundary, float upperBoundary);
+            virtual float randomSpeed();
+
             WeakPtr<JumpCenterpoint> center_; //!< The playing field.
             WeakPtr<JumpFigure> figure_; //!< The two bats.
             WeakPtr<Camera> camera;
-            Timer starttimer_; //!< A timer to delay the start of the game.
             int scoreLimit_; //!< If a player scored that much points, the game is ended.
 
             float totalScreenShift;
             float screenShiftSinceLastUpdate;
-            int sectionNumber;
-
-            bool fakeAdded_;
+            int sectionNumber_;
+            int adventureNumber_;
+            float platformWidth_;
+            float platformHeight_;
     };
 }
 

Added: code/branches/pickupsFS14/src/modules/jump/JumpBoots.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpBoots.cc	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpBoots.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,123 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpBoots.cc
+    @brief Implementation of the JumpBoots class.
+*/
+
+#include "JumpBoots.h"
+
+#include "core/CoreIncludes.h"
+#include "core/GameMode.h"
+#include "graphics/Model.h"
+#include "gametypes/Gametype.h"
+
+#include "JumpFigure.h"
+
+#include "sound/WorldSound.h"
+#include "core/XMLPort.h"
+
+namespace orxonox
+{
+    RegisterClass(JumpBoots);
+
+    /**
+    @brief
+        Constructor. Registers and initializes the object.
+    */
+    JumpBoots::JumpBoots(Context* context) : JumpItem(context)
+    {
+        RegisterObject(JumpBoots);
+
+        fuel_ = 3.0;
+
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,0));
+        setAcceleration(Vector3(0,0,0));
+        setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    }
+
+    /**
+    @brief
+        Destructor.
+    */
+    JumpBoots::~JumpBoots()
+    {
+
+    }
+
+    //xml port for loading sounds
+    void JumpBoots::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(JumpBoots, XMLPort, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Is called every tick.
+        Handles the movement of the ball and its interaction with the boundaries and bats.
+    @param dt
+        The time since the last tick.
+    */
+    void JumpBoots::tick(float dt)
+    {
+        SUPER(JumpBoots, tick, dt);
+
+        Vector3 rocketPosition = getWorldPosition();
+
+        if (attachedToFigure_ == false && figure_ != NULL)
+        {
+            Vector3 figurePosition = figure_->getWorldPosition();
+
+            if(figurePosition.x > rocketPosition.x-width_ && figurePosition.x < rocketPosition.x+width_ && figurePosition.z > rocketPosition.z-height_ && figurePosition.z < rocketPosition.z+height_)
+            {
+            	touchFigure();
+            }
+        }
+        else if (attachedToFigure_ == true)
+        {
+        	fuel_ -= dt;
+        	if (fuel_ < 0.0)
+        	{
+        		figure_->StopBoots(this);
+        	}
+        }
+    }
+
+    void JumpBoots::touchFigure()
+    {
+    	JumpItem::touchFigure();
+
+    	attachedToFigure_ = figure_->StartBoots(this);
+    	if (attachedToFigure_)
+    	{
+    		//Starte Feuer-Animation
+    	}
+    }
+}

Added: code/branches/pickupsFS14/src/modules/jump/JumpBoots.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpBoots.h	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpBoots.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,73 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpBoots.h
+    @brief Declaration of the JumpBoots class.
+    @ingroup Jump
+*/
+
+#ifndef _JumpBoots_H__
+#define _JumpBoots_H__
+
+#include "jump/JumpPrereqs.h"
+
+#include "util/Math.h"
+
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        This class manages the ball for @ref orxonox::Jump "Jump".
+
+        It is responsible for both the movement of the ball in the x,z-plane as well as its interaction with the boundaries of the playing field (defined by the @ref orxonox::JumpCenterpoint "JumpCenterpoint") and the @ref orxonox::JumpFigure "JumpFigures". Or more precisely, it makes the ball bounce off then upper and lower delimiters of the playing field, it makes the ball bounce off the bats and also detects when a player scores and takes appropriate measures.
+
+    @author
+        Fabian 'x3n' Landau
+
+    @ingroup Jump
+    */
+    class _JumpExport JumpBoots : public JumpItem
+    {
+        public:
+            JumpBoots(Context* context);
+            virtual ~JumpBoots();
+            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void touchFigure();
+        protected:
+            float stretch_;
+            float fuel_;
+    };
+}
+
+#endif /* _JumpBoots_H__ */

Modified: code/branches/pickupsFS14/src/modules/jump/JumpCenterpoint.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpCenterpoint.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpCenterpoint.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -54,8 +54,9 @@
         width_ = 200;
         height_ = 120;
         sectionLength_ = 120;
+        platformSpeed_ = 20.0;
 
-        this->checkGametype();
+        checkGametype();
     }
 
     /**
@@ -68,7 +69,8 @@
 
         XMLPortParam(JumpCenterpoint, "dimension", setFieldDimension, getFieldDimension, xmlelement, mode);
         XMLPortParam(JumpCenterpoint, "sectionLength", setSectionLength, getSectionLength, xmlelement, mode);
-        XMLPortParam(JumpCenterpoint, "platformLength", setPlatformLength, getPlatformLength, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "platformSpeed", setPlatformSpeed, getPlatformSpeed, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "cameraOffset", setCameraOffset, getCameraOffset, xmlelement, mode);
         XMLPortParam(JumpCenterpoint, "platformStaticTemplate", setPlatformStaticTemplate, getPlatformStaticTemplate, xmlelement, mode);
         XMLPortParam(JumpCenterpoint, "platformHMoveTemplate", setPlatformHMoveTemplate, getPlatformHMoveTemplate, xmlelement, mode);
         XMLPortParam(JumpCenterpoint, "platformVMoveTemplate", setPlatformVMoveTemplate, getPlatformVMoveTemplate, xmlelement, mode);
@@ -77,7 +79,15 @@
         XMLPortParam(JumpCenterpoint, "platformFakeTemplate", setPlatformFakeTemplate, getPlatformFakeTemplate, xmlelement, mode);
         XMLPortParam(JumpCenterpoint, "figureTemplate", setFigureTemplate, getFigureTemplate, xmlelement, mode);
         XMLPortParam(JumpCenterpoint, "projectileTemplate", setProjectileTemplate, getProjectileTemplate, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "springTemplate", setSpringTemplate, getSpringTemplate, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "rocketTemplate", setRocketTemplate, getRocketTemplate, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "propellerTemplate", setPropellerTemplate, getPropellerTemplate, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "bootsTemplate", setBootsTemplate, getBootsTemplate, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "shieldTemplate", setShieldTemplate, getShieldTemplate, xmlelement, mode);
         XMLPortParam(JumpCenterpoint, "enemy1Template", setEnemy1Template, getEnemy1Template, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "enemy2Template", setEnemy2Template, getEnemy2Template, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "enemy3Template", setEnemy3Template, getEnemy3Template, xmlelement, mode);
+        XMLPortParam(JumpCenterpoint, "enemy4Template", setEnemy4Template, getEnemy4Template, xmlelement, mode);
     }
 
     /**
@@ -89,7 +99,7 @@
         SUPER(JumpCenterpoint, changedGametype);
 
         // Check, whether it's still Jump.
-        this->checkGametype();
+        checkGametype();
     }
 
     /**

Modified: code/branches/pickupsFS14/src/modules/jump/JumpCenterpoint.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpCenterpoint.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpCenterpoint.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -98,7 +98,7 @@
         </Template>
         @endcode
         As can be seen, there are actually two templates. The first template is needed to set the camera for the @ref orxonox::JumpFigure "JumpFigure". The second template ist the actual template for the @ref orxonox::JumpFigure "JumpFigure", the template for the camera position is added and a @ref orxonox::Model "Model" for the @ref orxonox::JumpFigure "JumpFigure" is attached.
-        
+        propellerTemplate_
         Finally the JumpCenterpoint is created.
         @code
         <JumpCenterpoint name="jumpcenter" dimension="200,120" balltemplate="jumpball" battemplate="jumpbat" ballspeed="200" ballaccfactor="1.0" batspeed="130" batlength="0.25">
@@ -170,6 +170,36 @@
             const std::string& getProjectileTemplate() const
                 { return this->projectileTemplate_; }
 
+            void setSpringTemplate(const std::string& newTemplate)
+                { this->springTemplate_ = newTemplate; }
+
+            const std::string& getSpringTemplate() const
+                { return this->springTemplate_; }
+
+            void setRocketTemplate(const std::string& newTemplate)
+                { this->rocketTemplate_ = newTemplate; }
+
+            const std::string& getRocketTemplate() const
+                { return this->rocketTemplate_; }
+
+            void setPropellerTemplate(const std::string& newTemplate)
+                { this->propellerTemplate_ = newTemplate; }
+
+            const std::string& getPropellerTemplate() const
+                { return this->propellerTemplate_; }
+
+            void setBootsTemplate(const std::string& newTemplate)
+                { this->bootsTemplate_ = newTemplate; }
+
+            const std::string& getBootsTemplate() const
+                { return this->bootsTemplate_; }
+
+            void setShieldTemplate(const std::string& newTemplate)
+                { this->shieldTemplate_ = newTemplate; }
+
+            const std::string& getShieldTemplate() const
+                { return this->shieldTemplate_; }
+
             void setFigureTemplate(const std::string& newTemplate)
                 { this->figureTemplate_ = newTemplate; }
 
@@ -182,7 +212,25 @@
             const std::string& getEnemy1Template() const
                 { return this->enemy1Template_; }
 
+            void setEnemy2Template(const std::string& newTemplate)
+                { this->enemy2Template_ = newTemplate; }
 
+            const std::string& getEnemy2Template() const
+                { return this->enemy2Template_; }
+
+            void setEnemy3Template(const std::string& newTemplate)
+                { this->enemy3Template_ = newTemplate; }
+
+            const std::string& getEnemy3Template() const
+                { return this->enemy3Template_; }
+
+            void setEnemy4Template(const std::string& newTemplate)
+                { this->enemy4Template_ = newTemplate; }
+
+            const std::string& getEnemy4Template() const
+                { return this->enemy4Template_; }
+
+
             /**
             @brief Set the dimensions of the playing field.
             @param dimension A vector with the width of the playing field as first component and the height as second.
@@ -209,19 +257,19 @@
             float getSectionLength() const
                 { return sectionLength_; }
 
-            /**
-            @brief Set the dimensions of the playing field.
-            @param dimension A vector with the width of the playing field as first component and the height as second.
-            */
-            void setPlatformLength(const float platformLength)
-                { this->platformLength_ = platformLength; }
-            /**
-            @brief Get the dimensions of the playing field.
-            @return Returns a vector with the width of the playing field as first component and the height as second.
-            */
-            float getPlatformLength() const
-                { return platformLength_; }
+            void setPlatformSpeed(const float platformSpeed)
+                { this->platformSpeed_ = platformSpeed; }
 
+            float getPlatformSpeed() const
+                { return platformSpeed_; }
+
+            void setCameraOffset(const float cameraOffset)
+                { this->cameraOffset_ = cameraOffset; }
+
+            float getCameraOffset() const
+                { return cameraOffset_; }
+
+
         private:
             void checkGametype(); //!< Checks whether the gametype is Jump and if it is, sets its centerpoint.
 
@@ -232,13 +280,22 @@
             std::string platformTimerTemplate_; //!< The template for the ball.
             std::string platformFakeTemplate_; //!< The template for the ball.
             std::string projectileTemplate_; //!< The template for the ball.
+            std::string springTemplate_; //!< The template for the ball.
+            std::string rocketTemplate_; //!< The template for the ball.
+            std::string propellerTemplate_; //!< The template for the ball.
+            std::string bootsTemplate_; //!< The template for the ball.
+            std::string shieldTemplate_; //!< The template for the ball.
             std::string figureTemplate_; //!< The template for the bats.
             std::string enemy1Template_; //!< The template for the bats.
+            std::string enemy2Template_; //!< The template for the bats.
+            std::string enemy3Template_; //!< The template for the bats.
+            std::string enemy4Template_; //!< The template for the bats.
 
             float width_; //!< The height of the playing field.
             float height_; //!< The width of the playing field.
             float sectionLength_; //!< Height of one section
-            float platformLength_; // Avoids intersecting platforms
+            float platformSpeed_; //!< Height of one section
+            float cameraOffset_; //!< Height of one section
     };
 }
 

Modified: code/branches/pickupsFS14/src/modules/jump/JumpEnemy.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpEnemy.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpEnemy.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -55,11 +55,14 @@
     {
         RegisterObject(JumpEnemy);
 
-        this->figure_ = 0;
+        dead_ = false;
+        figure_ = 0;
+        width_ = 0.0;
+        height_ = 0.0;
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,0));
+        setAcceleration(Vector3(0,0,0));
         setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
-        this->setPosition(Vector3(0,0,0));
-        this->setVelocity(Vector3(0,0,0));
-        this->setAcceleration(Vector3(0,0,0));
     }
 
     /**
@@ -81,6 +84,9 @@
     void JumpEnemy::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(JumpEnemy, XMLPort, xmlelement, mode);
+
+        XMLPortParam(JumpEnemy, "height", setHeight, getHeight, xmlelement, mode);
+        XMLPortParam(JumpEnemy, "width", setWidth, getWidth, xmlelement, mode);
     }
 
     /**
@@ -115,6 +121,17 @@
             setPosition(position);
 
 
+        // Interact with Figure
+        Vector3 enemyPosition = getPosition();
+
+        if (figure_ != NULL)
+        {
+            Vector3 figurePosition = figure_->getPosition();
+            if(figurePosition.x > enemyPosition.x-width_ && figurePosition.x < enemyPosition.x+width_ && figurePosition.z > enemyPosition.z-height_ && figurePosition.z < enemyPosition.z+height_)
+            {
+            	touchFigure();
+            }
+        }
     }
 
     void JumpEnemy::setProperties(float newLeftBoundary, float newRightBoundary, float newLowerBoundary, float newUpperBoundary, float newHSpeed, float newVSpeed)
@@ -140,6 +157,9 @@
 
     void JumpEnemy::touchFigure()
     {
-
+    	if (dead_ == false)
+    	{
+    		figure_->CollisionWithEnemy(this);
+    	}
     }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpEnemy.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpEnemy.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpEnemy.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -86,13 +86,25 @@
             Vector2 getFieldDimension() const
                 { return Vector2(this->fieldWidth_, this->fieldHeight_); }
 
+            void setWidth(const float width)
+                { this->width_ = width; }
+            float getWidth() const
+                { return width_; }
+            void setHeight(const float height)
+                { this->height_ = height; }
+            float getHeight() const
+                { return height_; }
+
             virtual void setProperties(float newLeftBoundary, float newRightBoundary, float newLowerBoundary, float newUpperBoundary, float newHSpeed, float newVSpeed);
 
             void setFigure(WeakPtr<JumpFigure> bats); //!< Set the bats for the ball.
-
             virtual void touchFigure();
+            bool dead_;
+        protected:
 
-        protected:
+            float width_;
+            float height_;
+
             float fieldWidth_; //!< The width of the playing field.
             float fieldHeight_; //!< The height of the playing field.
 

Modified: code/branches/pickupsFS14/src/modules/jump/JumpFigure.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpFigure.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpFigure.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -48,12 +48,20 @@
     {
         RegisterObject(JumpFigure);
 
-        this->movement_ = 0;
-        this->bMoveLocal_ = false;
-        this->length_ = 0.25;
-        this->fieldWidth_ = 180;
-        this->bSteadiedPosition_ = false;
+        leftHand_ = NULL;
+        rightHand_ = NULL;
 
+        fieldHeight_ = 0;
+        fieldWidth_ = 0;
+
+        jumpSpeed_ = 0.0;
+        handSpeed_ = 0.0;
+        handMaxAngle_ = 0.0;
+        handMinAngle_ = 0.0;
+        rocketPos_ = 0.0;
+        propellerPos_ = 0.0;
+        bootsPos_ = 0.0;
+
         moveUpPressed = false;
         moveDownPressed = false;
         moveLeftPressed = false;
@@ -65,6 +73,19 @@
         gravityAcceleration = 8.0;
         mouseFactor_ = 75.0;
         maxFireRate = 0.3;
+
+        handAngle_ = 0.0;
+        animateHands_ = false;
+        turnUp_ = false;
+
+        rocketActive_ = false;
+        propellerActive_ = false;
+        bootsActive_ = false;
+        shieldActive_ = false;
+        rocketSpeed_ = 0.0;
+        propellerSpeed_ = 0.0;
+
+        dead_ = false;
     }
 
     /**
@@ -75,6 +96,17 @@
     {
         SUPER(JumpFigure, XMLPort, xmlelement, mode);
         XMLPortParam(JumpFigure, "mouseFactor", setMouseFactor, getMouseFactor, xmlelement, mode);
+        XMLPortParam(JumpFigure, "modelLefthand", setModelLeftHand, getModelLeftHand, xmlelement, mode);
+        XMLPortParam(JumpFigure, "modelRighthand", setModelRightHand, getModelRightHand, xmlelement, mode);
+        XMLPortParam(JumpFigure, "rocketPos", setRocketPos, getRocketPos, xmlelement, mode);
+        XMLPortParam(JumpFigure, "propellerPos", setPropellerPos, getPropellerPos, xmlelement, mode);
+        XMLPortParam(JumpFigure, "bootsPos", setBootsPos, getBootsPos, xmlelement, mode);
+        XMLPortParam(JumpFigure, "jumpSpeed", setJumpSpeed, getJumpSpeed, xmlelement, mode);
+        XMLPortParam(JumpFigure, "rocketSpeed", setRocketSpeed, getRocketSpeed, xmlelement, mode);
+        XMLPortParam(JumpFigure, "propellerSpeed", setPropellerSpeed, getPropellerSpeed, xmlelement, mode);
+        XMLPortParam(JumpFigure, "handMinAngle", setHandMinAngle, getHandMinAngle, xmlelement, mode);
+        XMLPortParam(JumpFigure, "handMaxAngle", setHandMaxAngle, getHandMaxAngle, xmlelement, mode);
+        XMLPortParam(JumpFigure, "handSpeed", setHandSpeed, getHandSpeed, xmlelement, mode);
     }
 
     /**
@@ -89,55 +121,71 @@
     	SUPER(JumpFigure, tick, dt);
 
         // If the bat is controlled (but not over the network).
-        if (this->hasLocalController())
+        if (hasLocalController())
         {
         	timeSinceLastFire += dt;
 
-            /*if (this->movement_ != 0)
-            {
-                // The absolute value of the movement is restricted to be lesser or equal than the speed of the bat.
-                this->movement_ = clamp(this->movement_, -1.0f, 1.0f) * this->speed_;
+        	// Move up/down
+        	Vector3 velocity = getVelocity();
+        	if (rocketActive_ == true)
+        	{
+        		velocity.z = rocketSpeed_;
+        	}
+        	else if (propellerActive_ == true)
+        	{
+        		velocity.z = propellerSpeed_;
+        	}
+        	else
+        	{
+        		velocity.z -= gravityAcceleration;
+        	}
 
-                // If moveRightLeft() is used the movement is dependento on wehther it is the right or the left bat, so, it is i.e. dependent on the orientation of the bat.
-                if (this->bMoveLocal_)
-                    this->setVelocity(this->getOrientation() * Vector3(this->movement_, 0, 0));
-                else
-                    this->setVelocity(0, 0, this->movement_);
+        	// Animate Hands
+        	if (animateHands_ == true)
+        	{
+        		if (turnUp_ == true)
+        		{
+        			handAngle_ += handSpeed_ * dt;
+        		}
+        		else
+				{
+					handAngle_ -= handSpeed_ * dt;
+				}
+            	if (handAngle_ > handMaxAngle_)
+            	{
+            		turnUp_ = false;
+            	}
+            	if (handAngle_ <= handMinAngle_)
+            	{
+            		animateHands_ = false;
+            	}
 
-                this->movement_ = 0;
-                this->bSteadiedPosition_ = false;
-            }
-            // If there is no movement but the position has not been steadied, the velocity is set to zero and the position is reaffirmed.
-            else if (!this->bSteadiedPosition_)
-            {
-                // To ensure network synchronicity
-                this->setVelocity(0, 0, 0);
-                this->setPosition(this->getPosition());
-                this->bSteadiedPosition_ = true;
-            }*/
+				if (leftHand_ != NULL)
+				{
+					leftHand_->setOrientation(Vector3(0.0, 1.0, 0.0), Degree(-handAngle_));
+				}
+				if (rightHand_ != NULL)
+				{
+					rightHand_->setOrientation(Vector3(0.0, 1.0, 0.0), Degree(handAngle_));
+				}
+        	}
 
-
-        	Vector3 velocity = getVelocity();
-
-        	velocity.z -= gravityAcceleration;
-
-        	/*if (moveLeftPressed == true)
+        	// Move left/right
+        	if (dead_ == false)
         	{
-        		velocity.x = -accelerationFactor;
-        		moveLeftPressed = false;
+        		velocity.x = -mouseFactor_*horizontalSpeed;
         	}
-        	if (moveRightPressed == true)
+        	else
         	{
-        		velocity.x = accelerationFactor;
-        		moveRightPressed = false;
-        	}*/
+        		velocity.x = 0.0;
+        	}
 
-        	velocity.x = -mouseFactor_*horizontalSpeed;
-
+        	// Cheats
         	if (moveUpPressed == true)
         	{
         		velocity.z = 200.0f;
         		moveUpPressed = false;
+        		dead_ = false;
         	}
         	if (moveDownPressed == true)
         	{
@@ -146,6 +194,7 @@
 
         	setVelocity(velocity);
 
+
         	if (firePressed && timeSinceLastFire >= maxFireRate)
         	{
 				firePressed = false;
@@ -155,8 +204,8 @@
         	}
         }
 
-        Vector3 position = this->getPosition();
-
+        // Move through the left and right screen boundaries
+        Vector3 position = getPosition();
         if (position.x < -fieldWidth_*1.1)
         {
         	position.x = fieldWidth_*1.1;
@@ -165,9 +214,9 @@
         {
         	position.x = -fieldWidth_*1.1;
         }
+        setPosition(position);
 
-        this->setPosition(position);
-
+        // Reset key variables
         moveUpPressed = false;
         moveDownPressed = false;
         moveLeftPressed = false;
@@ -177,14 +226,146 @@
 
     void JumpFigure::JumpFromPlatform(JumpPlatform* platform)
     {
-    	Vector3 velocity = getVelocity();
-    	velocity.z = 200.0f;
-    	setVelocity(velocity);
+    	if (dead_ == false)
+    	{
+        	Vector3 velocity = getVelocity();
+        	velocity.z = (bootsActive_ ? 1.2*jumpSpeed_ : jumpSpeed_);
+        	setVelocity(velocity);
+
+        	animateHands_ = true;
+        	handAngle_ = 0.0;
+        	turnUp_ = true;
+    	}
     }
 
+    void JumpFigure::JumpFromSpring(JumpSpring* spring)
+    {
+    	if (dead_ == false)
+    	{
+        	Vector3 velocity = getVelocity();
+        	velocity.z = 1.2*jumpSpeed_;
+        	setVelocity(velocity);
+    	}
+    }
 
+    void JumpFigure::CollisionWithEnemy(JumpEnemy* enemy)
+	{
+    	if (rocketActive_ == false && propellerActive_ == false && shieldActive_ == false)
+		{
+			dead_ = true;
+		}
+	}
+
+    bool JumpFigure::StartRocket(JumpRocket* rocket)
+    {
+    	if (rocketActive_ == false && propellerActive_ == false && bootsActive_ == false)
+    	{
+        	attach(rocket);
+        	rocket->setPosition(0.0, rocketPos_, 0.0);
+        	rocket->setVelocity(0.0, 0.0, 0.0);
+        	rocketActive_ = true;
+
+        	return true;
+    	}
+
+    	return false;
+    }
+
+    void JumpFigure::StopRocket(JumpRocket* rocket)
+    {
+		rocket->setPosition(0.0, 0.0, -1000.0);
+    	rocket->setVelocity(0.0, 0.0, 0.0);
+    	detach(rocket);
+		rocket->destroy();
+		rocketActive_ = false;
+    }
+
+    bool JumpFigure::StartPropeller(JumpPropeller* propeller)
+    {
+    	if (rocketActive_ == false && propellerActive_ == false && bootsActive_ == false)
+    	{
+        	attach(propeller);
+        	propeller->setPosition(0.0, 0.0, propellerPos_);
+        	propeller->setVelocity(0.0, 0.0, 0.0);
+        	propellerActive_ = true;
+
+        	return true;
+    	}
+
+    	return false;
+    }
+
+    void JumpFigure::StopPropeller(JumpPropeller* propeller)
+    {
+    	propeller->setPosition(0.0, 0.0, -1000.0);
+    	propeller->setVelocity(0.0, 0.0, 0.0);
+    	detach(propeller);
+    	propeller->destroy();
+    	propellerActive_ = false;
+    }
+
+    bool JumpFigure::StartBoots(JumpBoots* boots)
+    {
+    	if (rocketActive_ == false && propellerActive_ == false && bootsActive_ == false)
+    	{
+        	attach(boots);
+        	boots->setPosition(0.0, 0.0, bootsPos_);
+        	boots->setVelocity(0.0, 0.0, 0.0);
+        	bootsActive_ = true;
+
+        	return true;
+    	}
+
+    	return false;
+    }
+
+    void JumpFigure::StopBoots(JumpBoots* boots)
+    {
+    	boots->setPosition(0.0, 0.0, -1000.0);
+    	boots->setVelocity(0.0, 0.0, 0.0);
+    	detach(boots);
+    	boots->destroy();
+    	bootsActive_ = false;
+    }
+
+    bool JumpFigure::StartShield(JumpShield* shield)
+    {
+    	if (shieldActive_ == false)
+    	{
+        	attach(shield);
+        	shield->setPosition(0.0, 0.0, propellerPos_);
+        	shield->setVelocity(0.0, 0.0, 0.0);
+        	shieldActive_ = true;
+
+        	return true;
+    	}
+
+    	return false;
+    }
+
+    void JumpFigure::StopShield(JumpShield* shield)
+    {
+    	shield->setPosition(0.0, 0.0, -1000.0);
+    	shield->setVelocity(0.0, 0.0, 0.0);
+    	detach(shield);
+    	shield->destroy();
+    	shieldActive_ = false;
+    }
+
+    void JumpFigure::InitializeAnimation(Context* context)
+    {
+    	leftHand_ = new Model(context);
+    	rightHand_ = new Model(context);
+
+    	leftHand_->addTemplate(modelLeftHand_);
+    	rightHand_->addTemplate(modelRightHand_);
+
+		attach(leftHand_);
+		attach(rightHand_);
+    }
+
     /**
-    @brief
+    @briefhandPosition_
         Overloaded the function to steer the bat up and down.
     @param value
         A vector whose first component is the inverse direction in which we want to steer the bat.
@@ -215,24 +396,19 @@
     {
     	if (value.x > 0)
     	{
-    		//orxout() << "right pressed" << endl;
     		moveLeftPressed = false;
     		moveRightPressed = true;
     	}
     	else
     	{
-    		//orxout() << "left pressed" << endl;
     		moveLeftPressed = true;
     		moveRightPressed = false;
     	}
-        /*this->bMoveLocal_ = true;
-        this->movement_ = value.x;*/
     }
 
     void JumpFigure::rotateYaw(const Vector2& value)
     {
     	horizontalSpeed = value.x;
-
     }
 
     void JumpFigure::rotatePitch(const Vector2& value)
@@ -247,9 +423,14 @@
 
     }
 
+    void JumpFigure::fire(unsigned int firemode)
+    {
+    	//SUPER(JumpFigure, fire, firemode);
+    }
+
     void JumpFigure::fired(unsigned int firemode)
     {
-    	orxout() << "fire pressed" << endl;
+    	//SUPER(JumpFigure, fired, firemode);
     	firePressed = true;
     }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpFigure.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpFigure.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpFigure.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -70,54 +70,116 @@
             virtual void rotatePitch(const Vector2& value);
             virtual void rotateRoll(const Vector2& value);
 
+            void fire(unsigned int firemode);
             virtual void fired(unsigned int firemode);
 
             virtual void JumpFromPlatform(JumpPlatform* platform);
+            virtual void JumpFromSpring(JumpSpring* spring);
+            virtual void CollisionWithEnemy(JumpEnemy* enemy);
+            virtual bool StartRocket(JumpRocket* rocket);
+            virtual void StopRocket(JumpRocket* rocket);
+            virtual bool StartPropeller(JumpPropeller* propeller);
+            virtual void StopPropeller(JumpPropeller* propeller);
+            virtual bool StartBoots(JumpBoots* boots);
+            virtual void StopBoots(JumpBoots* boots);
+            virtual bool StartShield(JumpShield* shield);
+            virtual void StopShield(JumpShield* shield);
 
-            /**
-            @brief Set the height of the playing field.
-            @param height The height of the playing field.
-            */
+            virtual void InitializeAnimation(Context* context);
+
             void setFieldDimension(float width, float height)
-                { this->fieldWidth_ = width; this->fieldHeight_ = height; }
+                { fieldWidth_ = width; fieldHeight_ = height; }
 
             void setFieldDimension(const Vector2& dimension)
-                { this->setFieldDimension(dimension.x, dimension.y); }
+                { setFieldDimension(dimension.x, dimension.y); }
 
+            Vector2 getFieldDimension() const
+                { return Vector2(fieldWidth_, fieldHeight_); }
+
             void setMouseFactor(const float mouseFactor)
-                { this->mouseFactor_ = mouseFactor; }
+                { mouseFactor_ = mouseFactor; }
 
             const float getMouseFactor() const
-                { return this->mouseFactor_; }
+                { return mouseFactor_; }
 
-            /**
-            @brief Get the height of the playing field.
-            @return Returns the height of the playing field.
-            */
-            Vector2 getFieldDimension() const
-                { return Vector2(this->fieldWidth_, this->fieldHeight_); }
+            void setModelLeftHand(const std::string& modelLeftHand)
+                { modelLeftHand_ = modelLeftHand; }
 
-            /**
-            @brief Set the length of the bat.
-            @param length The length of the bat (in z-direction) as percentage of the height of the playing field.
-            */
-            void setLength(float length)
-                { this->length_ = length; }
-            /**
-            @brief Get the length of the bat.
-            @return Returns the length of the bat (in z-direction) as percentage of the height of the playing field.
-            */
-            float getLength() const
-                { return this->length_; }
+            const std::string& getModelLeftHand() const
+                { return modelLeftHand_; }
 
+            void setModelRightHand(const std::string& modelRightHand)
+                { modelRightHand_ = modelRightHand; }
+
+            const std::string& getModelRightHand() const
+                { return modelRightHand_; }
+
+            void setRocketPos(const float rocketPos)
+                { rocketPos_ = rocketPos; }
+
+            const float getRocketPos() const
+                { return rocketPos_; }
+
+			void setPropellerPos(const float propellerPos)
+				{ propellerPos_ = propellerPos; }
+
+			const float getPropellerPos() const
+				{ return propellerPos_; }
+
+			void setBootsPos(const float bootsPos)
+				{ bootsPos_ = bootsPos; }
+
+			const float getBootsPos() const
+				{ return bootsPos_; }
+
+            void setJumpSpeed(const float jumpSpeed)
+                { jumpSpeed_ = jumpSpeed; }
+
+            const float getJumpSpeed() const
+                { return jumpSpeed_; }
+
+            void setRocketSpeed(const float rocketSpeed)
+                { rocketSpeed_ = rocketSpeed; }
+
+            const float getRocketSpeed() const
+                { return rocketSpeed_; }
+
+            void setPropellerSpeed(const float propellerSpeed)
+                { propellerSpeed_ = propellerSpeed; }
+
+            const float getPropellerSpeed() const
+                { return propellerSpeed_; }
+
+            void setHandMinAngle(const float handMinAngle)
+                { handMinAngle_ = handMinAngle; }
+
+            const float getHandMinAngle() const
+                { return handMinAngle_; }
+
+            void setHandMaxAngle(const float handMaxAngle)
+                { handMaxAngle_ = handMaxAngle; }
+
+            const float getHandMaxAngle() const
+                { return handMaxAngle_; }
+
+            void setHandSpeed(const float handSpeed)
+                { handSpeed_ = handSpeed; }
+
+            const float getHandSpeed() const
+                { return handSpeed_; }
+
             bool fireSignal;
+            bool dead_;
+
         private:
-            float movement_; //!< The amount (and direction), in z-direction, of movement of the bat.
-            bool bMoveLocal_; //!< Helper to know whether the movement is caused by moveFrontBack() or moveRightLeft().
-            float length_; //!< The length of the bat (in z-direction) as percentage of the height of the playing field.
-            float fieldWidth_; //!< The height of the playing field.
+            std::string modelLeftHand_;
+            std::string modelRightHand_;
+
+            Model* leftHand_;
+            Model* rightHand_;
+
+            float fieldWidth_;
             float fieldHeight_;
-            bool bSteadiedPosition_; //!< Helper boolean, to keep track of when to steady the position, to ensure network synchronicity.
             float timeSinceLastFire;
 
             bool moveUpPressed;
@@ -128,9 +190,28 @@
 
             float gravityAcceleration;
             float mouseFactor_;
+
+            float jumpSpeed_;
+            float handSpeed_;
+            float handMaxAngle_;
+            float handMinAngle_;
+            float rocketPos_;
+            float propellerPos_;
+            float bootsPos_;
             float maxFireRate;
 
             float horizontalSpeed;
+
+            float handAngle_;
+            bool animateHands_;
+            bool turnUp_;
+
+            bool rocketActive_;
+            bool propellerActive_;
+            bool bootsActive_;
+            bool shieldActive_;
+            float rocketSpeed_;
+            float propellerSpeed_;
     };
 }
 

Modified: code/branches/pickupsFS14/src/modules/jump/JumpItem.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpItem.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpItem.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -55,11 +55,14 @@
     {
         RegisterObject(JumpItem);
 
-        this->figure_ = 0;
-        setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
-        this->setPosition(Vector3(0,0,0));
-        this->setVelocity(Vector3(0,0,0));
-        this->setAcceleration(Vector3(0,0,0));
+        attachedToFigure_ = false;
+
+        figure_ = 0;
+        height_ = 0.0;
+        width_ = 0.0;
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,0));
+        setAcceleration(Vector3(0,0,0));
     }
 
     /**
@@ -68,19 +71,16 @@
     */
     JumpItem::~JumpItem()
     {
-        /*if (this->isInitialized())
-        {
-            if (this->bDeleteBats_)
-                delete this->figure_;
 
-            delete[] this->batID_;
-        }*/
     }
 
     //xml port for loading sounds
     void JumpItem::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(JumpItem, XMLPort, xmlelement, mode);
+
+        XMLPortParam(JumpItem, "height", setHeight, getHeight, xmlelement, mode);
+        XMLPortParam(JumpItem, "width", setWidth, getWidth, xmlelement, mode);
     }
 
     /**
@@ -93,9 +93,8 @@
     void JumpItem::tick(float dt)
     {
         SUPER(JumpItem, tick, dt);
-
-        // Get the current position, velocity and acceleration of the enemy.
-        Vector3 position = getPosition();
+        // Get the current position, velocity and acceleration of the item.
+        Vector3 position = getWorldPosition();
         Vector3 velocity = getVelocity();
 
         if ((position.x < leftBoundary_ && velocity.x < 0) || (position.x > rightBoundary_ && velocity.x > 0))
@@ -108,13 +107,11 @@
         	velocity.z = -velocity.z;
         }
 
-        // Set the position, velocity and acceleration of the enemy, if they have changed.
+        // Set the position, velocity and acceleration of the item, if they have changed.
         if (velocity != getVelocity())
+        {
             setVelocity(velocity);
-        if (position != getPosition())
-            setPosition(position);
-
-
+        }
     }
 
     void JumpItem::setProperties(float newLeftBoundary, float newRightBoundary, float newLowerBoundary, float newUpperBoundary, float newHSpeed, float newVSpeed)
@@ -124,7 +121,7 @@
         lowerBoundary_ = newLowerBoundary;
         upperBoundary_ = newUpperBoundary;
 
-        this->setVelocity(Vector3(newHSpeed,0,newVSpeed));
+        setVelocity(Vector3(newHSpeed,0,newVSpeed));
     }
 
     /**

Modified: code/branches/pickupsFS14/src/modules/jump/JumpItem.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpItem.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpItem.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -61,47 +61,42 @@
         public:
             JumpItem(Context* context);
             virtual ~JumpItem();
-
             virtual void tick(float dt);
-
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void setProperties(float newLeftBoundary, float newRightBoundary, float newLowerBoundary, float newUpperBoundary, float newHSpeed, float newVSpeed);
+            virtual void setFigure(WeakPtr<JumpFigure> bats); //!< Set the bats for the ball.
+            virtual void touchFigure();
 
-            /**
-            @brief Set the dimensions of the playing field.
-            @param width The width of the playing field.
-            @param height The height of the playing field.
-            */
             void setFieldDimension(float width, float height)
                 { this->fieldWidth_ = width; this->fieldHeight_ = height; }
-            /**
-            @brief Get the dimensions of the playing field.
-            @param dimension A vector with the width as the first and height as the second component.
-            */
             void setFieldDimension(const Vector2& dimension)
                 { this->setFieldDimension(dimension.x, dimension.y); }
-            /**
-            @brief Get the dimensions of the playing field.
-            @return Returns a vector with the width as the first and height as the second component.
-            */
             Vector2 getFieldDimension() const
                 { return Vector2(this->fieldWidth_, this->fieldHeight_); }
 
-            virtual void setProperties(float newLeftBoundary, float newRightBoundary, float newLowerBoundary, float newUpperBoundary, float newHSpeed, float newVSpeed);
+            void setWidth(const float width)
+                { this->width_ = width; }
+            float getWidth() const
+                { return width_; }
+            void setHeight(const float height)
+                { this->height_ = height; }
+            float getHeight() const
+                { return height_; }
 
-            void setFigure(WeakPtr<JumpFigure> bats); //!< Set the bats for the ball.
+            bool attachedToFigure_;
 
-            virtual void touchFigure();
-
         protected:
             float fieldWidth_; //!< The width of the playing field.
             float fieldHeight_; //!< The height of the playing field.
 
+            WeakPtr<JumpFigure> figure_; //!< An array with the two bats.
+            float height_;
+            float width_;
+
             float leftBoundary_;
             float rightBoundary_;
             float lowerBoundary_;
             float upperBoundary_;
-
-            WeakPtr<JumpFigure> figure_; //!< An array with the two bats.
     };
 }
 

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPlatform.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatform.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatform.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -57,28 +57,28 @@
     {
         RegisterObject(JumpPlatform);
 
-        this->figure_ = 0;
+        figure_ = 0;
 
         //initialize sound
         if (GameMode::isMaster())
 		 {
-			 this->defScoreSound_ = new WorldSound(this->getContext());
-			 this->defScoreSound_->setVolume(1.0f);
-			 this->defBatSound_ = new WorldSound(this->getContext());
-			 this->defBatSound_->setVolume(0.4f);
-			 this->defBoundarySound_ = new WorldSound(this->getContext());
-			 this->defBoundarySound_->setVolume(0.5f);
+			 defScoreSound_ = new WorldSound(this->getContext());
+			 defScoreSound_->setVolume(1.0f);
+			 defBatSound_ = new WorldSound(this->getContext());
+			 defBatSound_->setVolume(0.4f);
+			 defBoundarySound_ = new WorldSound(this->getContext());
+			 defBoundarySound_->setVolume(0.5f);
 		 }
 		 else
 		 {
-			 this->defScoreSound_ = 0;
-			 this->defBatSound_ = 0;
-			 this->defBoundarySound_ = 0;
+			 defScoreSound_ = 0;
+			 defBatSound_ = 0;
+			 defBoundarySound_ = 0;
 		 }
 
-        this->setPosition(Vector3(0,0,0));
-        this->setVelocity(Vector3(0,0,0));
-        this->setAcceleration(Vector3(0,0,0));
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,0));
+        setAcceleration(Vector3(0,0,0));
     }
 
     /**
@@ -87,19 +87,17 @@
     */
     JumpPlatform::~JumpPlatform()
     {
-        /*if (this->isInitialized())
-        {
-            if (this->bDeleteBats_)
-                delete this->figure_;
 
-            delete[] this->batID_;
-        }*/
     }
 
     //xml port for loading sounds
     void JumpPlatform::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(JumpPlatform, XMLPort, xmlelement, mode);
+
+        XMLPortParam(JumpPlatform, "height", setHeight, getHeight, xmlelement, mode);
+        XMLPortParam(JumpPlatform, "width", setWidth, getWidth, xmlelement, mode);
+
         XMLPortParam(JumpPlatform, "defScoreSound",  setDefScoreSound,  getDefScoreSound,  xmlelement, mode);
         XMLPortParam(JumpPlatform, "defBatSound",  setDefBatSound,  getDefBatSound,  xmlelement, mode);
         XMLPortParam(JumpPlatform, "defBoundarySound",  setDefBoundarySound,  getDefBoundarySound,  xmlelement, mode);
@@ -123,118 +121,20 @@
             Vector3 figurePosition = figure_->getPosition();
             Vector3 figureVelocity = figure_->getVelocity();
 
-            if(figureVelocity.z < 0 && figurePosition.x > platformPosition.x-10 && figurePosition.x < platformPosition.x+10 && figurePosition.z > platformPosition.z-4 && figurePosition.z < platformPosition.z+4)
+            float tolerance = 3.0;
+
+            if(figureVelocity.z < 0 && figurePosition.x > platformPosition.x-width_/2 && figurePosition.x < platformPosition.x+width_/2 && figurePosition.z > platformPosition.z-height_/2*tolerance && figurePosition.z < platformPosition.z+height_/2)
             {
             	touchFigure();
             }
         }
-
-
-
-
-
-        /*
-        // If the ball has gone over the top or bottom boundary of the playing field (i.e. the ball has hit the top or bottom delimiters).
-        if (position.z > this->fieldHeight_ / 2 || position.z < -this->fieldHeight_ / 2)
-        {
-            defBoundarySound_->play(); //play boundary sound
-            // Its velocity in z-direction is inverted (i.e. it bounces off).
-            velocity.z = -velocity.z;
-            // And its position is set as to not overstep the boundary it has just crossed.
-            if (position.z > this->fieldHeight_ / 2)
-                position.z = this->fieldHeight_ / 2;
-            if (position.z < -this->fieldHeight_ / 2)
-                position.z = -this->fieldHeight_ / 2;
-
-            this->fireEvent();
-        }
-
-        // If the ball has crossed the left or right boundary of the playing field (i.e. a player has just scored, if the bat isn't there to parry).
-        if (position.x > this->fieldWidth_ / 2 || position.x < -this->fieldWidth_ / 2)
-        {
-            float distance = 0;
-
-            if (this->bat_ != NULL) // If there are bats.
-            {
-                // If the right boundary has been crossed.
-                if (position.x > this->fieldWidth_ / 2 && this->bat_[1] != NULL)
-                {
-                    // Calculate the distance (in z-direction) between the ball and the center of the bat, weighted by half of the effective length of the bat (with additional 10%)
-                    distance = (position.z - this->bat_[1]->getPosition().z) / (this->fieldHeight_ * (this->batlength_ * 1.10f) / 2);
-                    if (fabs(distance) <= 1) // If the bat is there to parry.
-                    {
-                        defBatSound_->play(); //play bat sound
-                        // Set the ball to be exactly at the boundary.
-                        position.x = this->fieldWidth_ / 2;
-                        // Invert its velocity in x-direction (i.e. it bounces off).
-                        velocity.x = -velocity.x;
-                        // Adjust the velocity in the z-direction, depending on where the ball hit the bat.
-                        velocity.z = distance * distance * sgn(distance) * JumpPlatform::MAX_REL_Z_VELOCITY * this->speed_;
-                        acceleration = this->bat_[1]->getVelocity() * this->accelerationFactor_ * -1;
-
-                        this->fireEvent();
-                    }
-                    // If the left player scores.
-                    else if (GameMode::isMaster() && position.x > this->fieldWidth_ / 2 * (1 + this->relMercyOffset_))
-                    {
-                        defScoreSound_->play();//play score sound
-                        if (this->getGametype() && this->bat_[0])
-                        {
-                            this->getGametype()->playerScored(this->bat_[0]->getPlayer());
-                            return;
-                        }
-                    }
-                }
-                // If the left boundary has been crossed.
-                else if (position.x < -this->fieldWidth_ / 2 && this->bat_[0] != NULL)
-                {
-                    // Calculate the distance (in z-direction) between the ball and the center of the bat, weighted by half of the effective length of the bat (with additional 10%)
-                    distance = (position.z - this->figure_->getPosition().z) / (this->fieldHeight_ * (this->batlength_ * 1.10f) / 2);
-                    if (fabs(distance) <= 1) // If the bat is there to parry.
-                    {
-                        defBatSound_->play(); //play bat sound
-                        // Set the ball to be exactly at the boundary.
-                        position.x = -this->fieldWidth_ / 2;
-                        // Invert its velocity in x-direction (i.e. it bounces off).
-                        velocity.x = -velocity.x;
-                        // Adjust the velocity in the z-direction, depending on where the ball hit the bat.
-                        velocity.z = distance * distance * sgn(distance) * JumpPlatform::MAX_REL_Z_VELOCITY * this->speed_;
-                        acceleration = this->bat_[0]->getVelocity() * this->accelerationFactor_ * -1;
-
-                        this->fireEvent();
-                    }
-                    // If the right player scores.
-                    else if (GameMode::isMaster() && position.x < -this->fieldWidth_ / 2 * (1 + this->relMercyOffset_))
-                    {
-                        defScoreSound_->play();//play score sound
-                        if (this->getGametype() && this->bat_[1])
-                        {
-                            this->getGametype()->playerScored(this->bat_[1]->getPlayer());
-                            return;
-                        }
-                    }
-                }
-            }
-        }
-        */
     }
 
-    /**
-    @brief
-        Set the bats for the ball.
-    @param bats
-        An array (of size 2) of weak pointers, to be set as the new bats.
-    */
     void JumpPlatform::setFigure(WeakPtr<JumpFigure> newFigure)
     {
         figure_ = newFigure;
     }
 
-    void JumpPlatform::accelerateFigure()
-    {
-    	figure_->JumpFromPlatform(this);
-    }
-
     void JumpPlatform::touchFigure()
     {
 

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPlatform.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatform.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatform.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -61,35 +61,9 @@
         public:
             JumpPlatform(Context* context);
             virtual ~JumpPlatform();
-
             virtual void tick(float dt);
-
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
-            /**
-            @brief Set the dimensions of the playing field.
-            @param width The width of the playing field.
-            @param height The height of the playing field.
-            */
-            void setFieldDimension(float width, float height)
-                { this->fieldWidth_ = width; this->fieldHeight_ = height; }
-            /**
-            @brief Get the dimensions of the playing field.
-            @param dimension A vector with the width as the first and height as the second component.
-            */
-            void setFieldDimension(const Vector2& dimension)
-                { this->setFieldDimension(dimension.x, dimension.y); }
-            /**
-            @brief Get the dimensions of the playing field.
-            @return Returns a vector with the width as the first and height as the second component.
-            */
-            Vector2 getFieldDimension() const
-                { return Vector2(this->fieldWidth_, this->fieldHeight_); }
-
-
             void setFigure(WeakPtr<JumpFigure> bats); //!< Set the bats for the ball.
-
-            virtual void accelerateFigure();
             virtual void touchFigure();
 
             static const float MAX_REL_Z_VELOCITY;
@@ -101,10 +75,19 @@
             void setDefBoundarySound(const std::string& engineSound);
             const std::string& getDefBoundarySound();
 
+            void setWidth(const float width)
+                { this->width_ = width; }
+            float getWidth() const
+                { return width_; }
+            void setHeight(const float height)
+                { this->height_ = height; }
+            float getHeight() const
+                { return height_; }
+
         protected:
-            float fieldWidth_; //!< The width of the playing field.
-            float fieldHeight_; //!< The height of the playing field.
-            WeakPtr<JumpFigure> figure_; //!< An array with the two bats.
+            float width_;
+            float height_;
+            WeakPtr<JumpFigure> figure_;
             WorldSound* defScoreSound_;
             WorldSound* defBatSound_;
             WorldSound* defBoundarySound_;

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPlatformDisappear.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatformDisappear.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatformDisappear.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -100,9 +100,8 @@
     {
     	if (isActive())
     	{
-        	accelerateFigure();
+    		figure_->JumpFromPlatform(this);
         	active_ = false;
-        	orxout() << "platform deactivated" << endl;
     	}
     }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPlatformFake.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatformFake.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatformFake.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -43,8 +43,6 @@
 #include "sound/WorldSound.h"
 #include "core/XMLPort.h"
 
-#include "graphics/Backlight.h"
-
 namespace orxonox
 {
     RegisterClass(JumpPlatformFake);

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPlatformHMove.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatformHMove.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatformHMove.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -115,6 +115,6 @@
 
     void JumpPlatformHMove::touchFigure()
     {
-    	accelerateFigure();
+    	figure_->JumpFromPlatform(this);
     }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPlatformStatic.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatformStatic.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatformStatic.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -86,6 +86,6 @@
 
     void JumpPlatformStatic::touchFigure()
     {
-    	accelerateFigure();
+    	figure_->JumpFromPlatform(this);
     }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPlatformTimer.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatformTimer.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatformTimer.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -116,10 +116,9 @@
 
     void JumpPlatformTimer::touchFigure()
     {
-    	accelerateFigure();
     	if (isActive())
     	{
-    		accelerateFigure();
+    		figure_->JumpFromPlatform(this);
     	}
     }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPlatformVMove.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPlatformVMove.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPlatformVMove.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -112,6 +112,6 @@
 
     void JumpPlatformVMove::touchFigure()
     {
-    	accelerateFigure();
+    	figure_->JumpFromPlatform(this);
     }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpPrereqs.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPrereqs.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPrereqs.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -78,6 +78,11 @@
     class JumpProjectile;
     class JumpEnemy;
     class JumpItem;
+    class JumpSpring;
+    class JumpRocket;
+    class JumpPropeller;
+    class JumpBoots;
+    class JumpShield;
     class JumpFigure;
     class JumpCenterpoint;
     class JumpScore;

Modified: code/branches/pickupsFS14/src/modules/jump/JumpProjectile.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpProjectile.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpProjectile.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -55,13 +55,13 @@
     {
         RegisterObject(JumpProjectile);
 
-        this->figure_ = 0;
+        figure_ = 0;
 
-        this->registerVariables();
+        registerVariables();
 
-        this->setPosition(Vector3(0,0,0));
-        this->setVelocity(Vector3(0,0,0));
-        this->setAcceleration(Vector3(0,0,0));
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,250.0));
+        setAcceleration(Vector3(0,0,0));
     }
 
     /**
@@ -107,18 +107,19 @@
     {
         SUPER(JumpProjectile, tick, dt);
 
-        Vector3 platformPosition = this->getPosition();
+        Vector3 projectilePosition = getPosition();
 
-        if (figure_ != NULL)
-        {
-            Vector3 figurePosition = figure_->getPosition();
-            Vector3 figureVelocity = figure_->getVelocity();
+		for (ObjectList<JumpEnemy>::iterator it = ObjectList<JumpEnemy>::begin(); it != ObjectList<JumpEnemy>::end(); ++it)
+		{
+			Vector3 enemyPosition = it->getPosition();
+			float enemyWidth = it->getWidth();
+			float enemyHeight = it->getHeight();
 
-            if(figureVelocity.z < 0 && figurePosition.x > platformPosition.x-10 && figurePosition.x < platformPosition.x+10 && figurePosition.z > platformPosition.z-4 && figurePosition.z < platformPosition.z+4)
-            {
-            	touchFigure();
-            }
-        }
+			if(projectilePosition.x > enemyPosition.x-enemyWidth && projectilePosition.x < enemyPosition.x+enemyWidth && projectilePosition.z > enemyPosition.z-enemyHeight && projectilePosition.z < enemyPosition.z+enemyHeight)
+			{
+				it->dead_ = true;
+			}
+		}
     }
 
     /**
@@ -127,18 +128,8 @@
     @param bats
         An array (of size 2) of weak pointers, to be set as the new bats.
     */
-    void JumpProjectile::setFigure(WeakPtr<JumpFigure> newFigure)
+    void JumpProjectile::setFigure(WeakPtr<JumpFigure> figure)
     {
-        figure_ = newFigure;
+        figure_ = figure;
     }
-
-    void JumpProjectile::accelerateFigure()
-    {
-
-    }
-
-    void JumpProjectile::touchFigure()
-    {
-
-    }
 }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpProjectile.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpProjectile.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpProjectile.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -66,32 +66,18 @@
 
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
-            /**
-            @brief Set the dimensions of the playing field.
-            @param width The width of the playing field.
-            @param height The height of the playing field.
-            */
             void setFieldDimension(float width, float height)
                 { this->fieldWidth_ = width; this->fieldHeight_ = height; }
-            /**
-            @brief Get the dimensions of the playing field.
-            @param dimension A vector with the width as the first and height as the second component.
-            */
+
             void setFieldDimension(const Vector2& dimension)
                 { this->setFieldDimension(dimension.x, dimension.y); }
-            /**
-            @brief Get the dimensions of the playing field.
-            @return Returns a vector with the width as the first and height as the second component.
-            */
+
             Vector2 getFieldDimension() const
                 { return Vector2(this->fieldWidth_, this->fieldHeight_); }
 
 
-            void setFigure(WeakPtr<JumpFigure> bats); //!< Set the bats for the ball.
+            void setFigure(WeakPtr<JumpFigure> figure);
 
-            virtual void accelerateFigure();
-            virtual void touchFigure();
-
         protected:
             void registerVariables();
 

Added: code/branches/pickupsFS14/src/modules/jump/JumpPropeller.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPropeller.cc	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPropeller.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,123 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpPropeller.cc
+    @brief Implementation of the JumpPropeller class.
+*/
+
+#include "JumpPropeller.h"
+
+#include "core/CoreIncludes.h"
+#include "core/GameMode.h"
+#include "graphics/Model.h"
+#include "gametypes/Gametype.h"
+
+#include "JumpFigure.h"
+
+#include "sound/WorldSound.h"
+#include "core/XMLPort.h"
+
+namespace orxonox
+{
+    RegisterClass(JumpPropeller);
+
+    /**
+    @brief
+        Constructor. Registers and initializes the object.
+    */
+    JumpPropeller::JumpPropeller(Context* context) : JumpItem(context)
+    {
+        RegisterObject(JumpPropeller);
+
+        fuel_ = 3.0;
+
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,0));
+        setAcceleration(Vector3(0,0,0));
+        setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    }
+
+    /**
+    @brief
+        Destructor.
+    */
+    JumpPropeller::~JumpPropeller()
+    {
+
+    }
+
+    //xml port for loading sounds
+    void JumpPropeller::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(JumpPropeller, XMLPort, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Is called every tick.
+        Handles the movement of the ball and its interaction with the boundaries and bats.
+    @param dt
+        The time since the last tick.
+    */
+    void JumpPropeller::tick(float dt)
+    {
+        SUPER(JumpPropeller, tick, dt);
+
+        Vector3 PropellerPosition = getWorldPosition();
+
+        if (attachedToFigure_ == false && figure_ != NULL)
+        {
+            Vector3 figurePosition = figure_->getWorldPosition();
+
+            if(figurePosition.x > PropellerPosition.x-width_ && figurePosition.x < PropellerPosition.x+width_ && figurePosition.z > PropellerPosition.z-height_ && figurePosition.z < PropellerPosition.z+height_)
+            {
+            	touchFigure();
+            }
+        }
+        else if (attachedToFigure_ == true)
+        {
+        	fuel_ -= dt;
+        	if (fuel_ < 0.0)
+        	{
+        		figure_->StopPropeller(this);
+        	}
+        }
+    }
+
+    void JumpPropeller::touchFigure()
+    {
+    	JumpItem::touchFigure();
+
+    	attachedToFigure_ = figure_->StartPropeller(this);
+    	if (attachedToFigure_)
+    	{
+    		setAngularVelocity(Vector3(0,0,10.0));
+    	}
+    }
+}

Added: code/branches/pickupsFS14/src/modules/jump/JumpPropeller.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpPropeller.h	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpPropeller.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,73 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpPropeller.h
+    @brief Declaration of the JumpPropeller class.
+    @ingroup Jump
+*/
+
+#ifndef _JumpPropeller_H__
+#define _JumpPropeller_H__
+
+#include "jump/JumpPrereqs.h"
+
+#include "util/Math.h"
+
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        This class manages the ball for @ref orxonox::Jump "Jump".
+
+        It is responsible for both the movement of the ball in the x,z-plane as well as its interaction with the boundaries of the playing field (defined by the @ref orxonox::JumpCenterpoint "JumpCenterpoint") and the @ref orxonox::JumpFigure "JumpFigures". Or more precisely, it makes the ball bounce off then upper and lower delimiters of the playing field, it makes the ball bounce off the bats and also detects when a player scores and takes appropriate measures.
+
+    @author
+        Fabian 'x3n' Landau
+
+    @ingroup Jump
+    */
+    class _JumpExport JumpPropeller : public JumpItem
+    {
+        public:
+            JumpPropeller(Context* context);
+            virtual ~JumpPropeller();
+            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void touchFigure();
+        protected:
+            float stretch_;
+            float fuel_;
+    };
+}
+
+#endif /* _JumpPropeller_H__ */

Added: code/branches/pickupsFS14/src/modules/jump/JumpRocket.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpRocket.cc	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpRocket.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,123 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpRocket.cc
+    @brief Implementation of the JumpRocket class.
+*/
+
+#include "JumpRocket.h"
+
+#include "core/CoreIncludes.h"
+#include "core/GameMode.h"
+#include "graphics/Model.h"
+#include "gametypes/Gametype.h"
+
+#include "JumpFigure.h"
+
+#include "sound/WorldSound.h"
+#include "core/XMLPort.h"
+
+namespace orxonox
+{
+    RegisterClass(JumpRocket);
+
+    /**
+    @brief
+        Constructor. Registers and initializes the object.
+    */
+    JumpRocket::JumpRocket(Context* context) : JumpItem(context)
+    {
+        RegisterObject(JumpRocket);
+
+        fuel_ = 3.0;
+
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,0));
+        setAcceleration(Vector3(0,0,0));
+        setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    }
+
+    /**
+    @brief
+        Destructor.
+    */
+    JumpRocket::~JumpRocket()
+    {
+
+    }
+
+    //xml port for loading sounds
+    void JumpRocket::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(JumpRocket, XMLPort, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Is called every tick.
+        Handles the movement of the ball and its interaction with the boundaries and bats.
+    @param dt
+        The time since the last tick.
+    */
+    void JumpRocket::tick(float dt)
+    {
+        SUPER(JumpRocket, tick, dt);
+
+        Vector3 rocketPosition = getWorldPosition();
+
+        if (attachedToFigure_ == false && figure_ != NULL)
+        {
+            Vector3 figurePosition = figure_->getWorldPosition();
+
+            if(figurePosition.x > rocketPosition.x-width_ && figurePosition.x < rocketPosition.x+width_ && figurePosition.z > rocketPosition.z-height_ && figurePosition.z < rocketPosition.z+height_)
+            {
+            	touchFigure();
+            }
+        }
+        else if (attachedToFigure_ == true)
+        {
+        	fuel_ -= dt;
+        	if (fuel_ < 0.0)
+        	{
+        		figure_->StopRocket(this);
+        	}
+        }
+    }
+
+    void JumpRocket::touchFigure()
+    {
+    	JumpItem::touchFigure();
+
+    	attachedToFigure_ = figure_->StartRocket(this);
+    	if (attachedToFigure_)
+    	{
+    		//Starte Feuer-Animation
+    	}
+    }
+}

Added: code/branches/pickupsFS14/src/modules/jump/JumpRocket.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpRocket.h	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpRocket.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,73 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpRocket.h
+    @brief Declaration of the JumpRocket class.
+    @ingroup Jump
+*/
+
+#ifndef _JumpRocket_H__
+#define _JumpRocket_H__
+
+#include "jump/JumpPrereqs.h"
+
+#include "util/Math.h"
+
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        This class manages the ball for @ref orxonox::Jump "Jump".
+
+        It is responsible for both the movement of the ball in the x,z-plane as well as its interaction with the boundaries of the playing field (defined by the @ref orxonox::JumpCenterpoint "JumpCenterpoint") and the @ref orxonox::JumpFigure "JumpFigures". Or more precisely, it makes the ball bounce off then upper and lower delimiters of the playing field, it makes the ball bounce off the bats and also detects when a player scores and takes appropriate measures.
+
+    @author
+        Fabian 'x3n' Landau
+
+    @ingroup Jump
+    */
+    class _JumpExport JumpRocket : public JumpItem
+    {
+        public:
+            JumpRocket(Context* context);
+            virtual ~JumpRocket();
+            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void touchFigure();
+        protected:
+            float stretch_;
+            float fuel_;
+    };
+}
+
+#endif /* _JumpRocket_H__ */

Modified: code/branches/pickupsFS14/src/modules/jump/JumpScore.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpScore.cc	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpScore.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -54,8 +54,9 @@
     {
         RegisterObject(JumpScore);
 
-        this->owner_ = NULL;
-
+        owner_ = NULL;
+        showScore_ = false;
+        showMessages_ = false;
     }
 
     /**
@@ -74,6 +75,10 @@
     void JumpScore::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(JumpScore, XMLPort, xmlelement, mode);
+
+        XMLPortParam(JumpScore, "showScore", setShowScore, getShowScore, xmlelement, mode);
+        XMLPortParam(JumpScore, "showMessages", setShowMessages, getShowMessages, xmlelement, mode);
+        XMLPortParam(JumpScore, "gameOverText", setGameOverText, getGameOverText, xmlelement, mode);
     }
 
     /**
@@ -91,60 +96,24 @@
 
         if (this->owner_ != NULL)
         {
-        	/*
-            if (!this->owner_->hasEnded())
-            {
-                // Get the two players.
-                player1_ = this->owner_->getPlayer();
-            }
-
-            std::string name1;
-
-            std::string score1("0");
-
-            // Save the name and score of each player as a string.
-            if (player1_ != NULL)
-            {
-                name1 = player1_->getName();
-                score1 = multi_cast<std::string>(this->owner_->getScore(player1_));
-            }
-
-            // Assemble the strings, depending on what should all be displayed.
-            std::string output1;
-            if (this->bShowLeftPlayer_)
-            {
-                if (this->bShowName_ && this->bShowScore_ && player1_ != NULL)
-                    output1 = name1 + " - " + score1;
-                else if (this->bShowScore_)
-                    output1 = score1;
-                else if (this->bShowName_)
-                    output1 = name1;
-            }
-
-            std::string output("JUMP");
-            if (this->bShowName_ || this->bShowScore_)
-            {
-                if (this->bShowLeftPlayer_ && this->bShowRightPlayer_)
-                    output = output1 + ':' + output2;
-                else if (this->bShowLeftPlayer_ || this->bShowRightPlayer_)
-                    output = output1 + output2;
-            }
-
-            this->setCaption(output);*/
-
-
-
-
             if (!owner_->hasEnded())
             {
                 player_ = owner_->getPlayer();
 
                 if (player_ != NULL)
                 {
-                	int score = owner_->getScore(player_);
+                	if (showScore_ == true)
+                	{
+                    	int score = owner_->getScore(player_);
 
-                	std::string str = multi_cast<std::string>(score);
-                	setCaption(str);
+                    	std::string str = multi_cast<std::string>(score);
+                    	setCaption(str);
+                	}
+                	else if (showMessages_ == true)
+                	{
+
+                    	setCaption(owner_->getDead(player_) == true ? gameOverText_ : "");
+                	}
                 }
             }
         }

Modified: code/branches/pickupsFS14/src/modules/jump/JumpScore.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpScore.h	2014-05-22 12:49:16 UTC (rev 10073)
+++ code/branches/pickupsFS14/src/modules/jump/JumpScore.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -63,10 +63,31 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
             virtual void changedOwner(); //!< Is called when the owner changes.
 
+            void setShowScore(const bool showScore)
+                { showScore_ = showScore; }
+
+            const bool getShowScore() const
+                { return showScore_; }
+
+            void setShowMessages(const bool showMessages)
+                { showMessages_ = showMessages; }
+
+            const bool getShowMessages() const
+                { return showMessages_; }
+
+            void setGameOverText(const std::string& gameOverText)
+                { this->gameOverText_ = gameOverText; }
+
+            const std::string& getGameOverText() const
+                { return this->gameOverText_; }
+
         private:
             Jump* owner_; //!< The Jump game that owns this JumpScore.
             WeakPtr<PlayerInfo> player_; //!< Store information about left player permanently.
             WorldSound* scoreSound_;
+            bool showScore_;
+            bool showMessages_;
+            std::string gameOverText_;
 
     };
 }

Added: code/branches/pickupsFS14/src/modules/jump/JumpShield.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpShield.cc	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpShield.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,123 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpShield.cc
+    @brief Implementation of the JumpShield class.
+*/
+
+#include "JumpShield.h"
+
+#include "core/CoreIncludes.h"
+#include "core/GameMode.h"
+#include "graphics/Model.h"
+#include "gametypes/Gametype.h"
+
+#include "JumpFigure.h"
+
+#include "sound/WorldSound.h"
+#include "core/XMLPort.h"
+
+namespace orxonox
+{
+    RegisterClass(JumpShield);
+
+    /**
+    @brief
+        Constructor. Registers and initializes the object.
+    */
+    JumpShield::JumpShield(Context* context) : JumpItem(context)
+    {
+        RegisterObject(JumpShield);
+
+        fuel_ = 7.0;
+
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,0));
+        setAcceleration(Vector3(0,0,0));
+        setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    }
+
+    /**
+    @brief
+        Destructor.
+    */
+    JumpShield::~JumpShield()
+    {
+
+    }
+
+    //xml port for loading sounds
+    void JumpShield::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(JumpShield, XMLPort, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Is called every tick.
+        Handles the movement of the ball and its interaction with the boundaries and bats.
+    @param dt
+        The time since the last tick.
+    */
+    void JumpShield::tick(float dt)
+    {
+        SUPER(JumpShield, tick, dt);
+
+        Vector3 shieldPosition = getWorldPosition();
+
+        if (attachedToFigure_ == false && figure_ != NULL)
+        {
+            Vector3 figurePosition = figure_->getWorldPosition();
+
+            if(figurePosition.x > shieldPosition.x-width_ && figurePosition.x < shieldPosition.x+width_ && figurePosition.z > shieldPosition.z-height_ && figurePosition.z < shieldPosition.z+height_)
+            {
+            	touchFigure();
+            }
+        }
+        else if (attachedToFigure_ == true)
+        {
+        	fuel_ -= dt;
+        	if (fuel_ < 0.0)
+        	{
+        		figure_->StopShield(this);
+        	}
+        }
+    }
+
+    void JumpShield::touchFigure()
+    {
+    	JumpItem::touchFigure();
+
+    	attachedToFigure_ = figure_->StartShield(this);
+    	if (attachedToFigure_)
+    	{
+    		//Starte Feuer-Animation
+    	}
+    }
+}

Added: code/branches/pickupsFS14/src/modules/jump/JumpShield.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpShield.h	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpShield.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,73 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpShield.h
+    @brief Declaration of the JumpShield class.
+    @ingroup Jump
+*/
+
+#ifndef _JumpShield_H__
+#define _JumpShield_H__
+
+#include "jump/JumpPrereqs.h"
+
+#include "util/Math.h"
+
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        This class manages the ball for @ref orxonox::Jump "Jump".
+
+        It is responsible for both the movement of the ball in the x,z-plane as well as its interaction with the boundaries of the playing field (defined by the @ref orxonox::JumpCenterpoint "JumpCenterpoint") and the @ref orxonox::JumpFigure "JumpFigures". Or more precisely, it makes the ball bounce off then upper and lower delimiters of the playing field, it makes the ball bounce off the bats and also detects when a player scores and takes appropriate measures.
+
+    @author
+        Fabian 'x3n' Landau
+
+    @ingroup Jump
+    */
+    class _JumpExport JumpShield : public JumpItem
+    {
+        public:
+            JumpShield(Context* context);
+            virtual ~JumpShield();
+            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void touchFigure();
+        protected:
+            float stretch_;
+            float fuel_;
+    };
+}
+
+#endif /* _JumpShield_H__ */

Added: code/branches/pickupsFS14/src/modules/jump/JumpSpring.cc
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpSpring.cc	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpSpring.cc	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,129 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpSpring.cc
+    @brief Implementation of the JumpSpring class.
+*/
+
+#include "JumpSpring.h"
+
+#include "core/CoreIncludes.h"
+#include "core/GameMode.h"
+#include "graphics/Model.h"
+#include "gametypes/Gametype.h"
+
+#include "JumpFigure.h"
+
+#include "sound/WorldSound.h"
+#include "core/XMLPort.h"
+
+namespace orxonox
+{
+    RegisterClass(JumpSpring);
+
+    /**
+    @brief
+        Constructor. Registers and initializes the object.
+    */
+    JumpSpring::JumpSpring(Context* context) : JumpItem(context)
+    {
+        RegisterObject(JumpSpring);
+
+        stretch_ = 1.0;
+
+        setPosition(Vector3(0,0,0));
+        setVelocity(Vector3(0,0,0));
+        setAcceleration(Vector3(0,0,0));
+
+        setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+    }
+
+    /**
+    @brief
+        Destructor.
+    */
+    JumpSpring::~JumpSpring()
+    {
+
+    }
+
+    //xml port for loading sounds
+    void JumpSpring::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(JumpSpring, XMLPort, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Is called every tick.
+        Handles the movement of the ball and its interaction with the boundaries and bats.
+    @param dt
+        The time since the last tick.
+    */
+    void JumpSpring::tick(float dt)
+    {
+        SUPER(JumpSpring, tick, dt);
+
+        if (stretch_ > 1.0)
+        {
+        	stretch_ -= dt;
+        	setScale3D(1.0, 1.0, stretch_);
+        }
+
+        Vector3 springPosition = getWorldPosition();
+
+        if (figure_ != NULL)
+        {
+            Vector3 figurePosition = figure_->getWorldPosition();
+            Vector3 figureVelocity = figure_->getVelocity();
+
+            if(figureVelocity.z < 0 && figurePosition.x > springPosition.x-width_ && figurePosition.x < springPosition.x+width_ && figurePosition.z > springPosition.z-height_ && figurePosition.z < springPosition.z+height_)
+            {
+            	touchFigure();
+            }
+        }
+    }
+
+    void JumpSpring::touchFigure()
+    {
+    	JumpItem::touchFigure();
+
+    	stretch_ = 3.0;
+
+    	accelerateFigure();
+    }
+
+    void JumpSpring::accelerateFigure()
+    {
+    	if (figure_ != 0)
+    	{
+			figure_->JumpFromSpring(this);
+    	}
+    }
+}

Added: code/branches/pickupsFS14/src/modules/jump/JumpSpring.h
===================================================================
--- code/branches/pickupsFS14/src/modules/jump/JumpSpring.h	                        (rev 0)
+++ code/branches/pickupsFS14/src/modules/jump/JumpSpring.h	2014-05-22 13:05:46 UTC (rev 10074)
@@ -0,0 +1,73 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file JumpSpring.h
+    @brief Declaration of the JumpSpring class.
+    @ingroup Jump
+*/
+
+#ifndef _JumpSpring_H__
+#define _JumpSpring_H__
+
+#include "jump/JumpPrereqs.h"
+
+#include "util/Math.h"
+
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        This class manages the ball for @ref orxonox::Jump "Jump".
+
+        It is responsible for both the movement of the ball in the x,z-plane as well as its interaction with the boundaries of the playing field (defined by the @ref orxonox::JumpCenterpoint "JumpCenterpoint") and the @ref orxonox::JumpFigure "JumpFigures". Or more precisely, it makes the ball bounce off then upper and lower delimiters of the playing field, it makes the ball bounce off the bats and also detects when a player scores and takes appropriate measures.
+
+    @author
+        Fabian 'x3n' Landau
+
+    @ingroup Jump
+    */
+    class _JumpExport JumpSpring : public JumpItem
+    {
+        public:
+            JumpSpring(Context* context);
+            virtual ~JumpSpring();
+            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void accelerateFigure();
+            virtual void touchFigure();
+        protected:
+            float stretch_;
+    };
+}
+
+#endif /* _JumpSpring_H__ */




More information about the Orxonox-commit mailing list