Index: /code/branches/presentation3/data/levels/tutorial.oxw
===================================================================
--- /code/branches/presentation3/data/levels/tutorial.oxw	(revision 7017)
+++ /code/branches/presentation3/data/levels/tutorial.oxw	(revision 7018)
@@ -14,12 +14,15 @@
   >
 
-    <Drone name="meineDrohne" primarythrust="80" auxilarythrust="10" rotationthrust="10" mass= "50" linearDamping = "0.9" angularDamping = "0.7">
-      <attached>
-        <Model scale="1" mesh="drone.mesh"/>
-      </attached>
-      <collisionShapes>
-        <BoxCollisionShape position="0,0,0"      halfExtents="10, 10, 10" />
-      </collisionShapes>
-    </Drone>
+  
+  
+  
+<Drone name="meineDrohne" primarythrust="80" auxilarythrust="10" rotationthrust="10" mass= "50" linearDamping = "0.9" angularDamping = "0.7">
+  <attached>
+    <Model scale="1" mesh="drone.mesh"/>
+  </attached>
+  <collisionShapes>
+    <BoxCollisionShape position="0,0,0"      halfExtents="10, 10, 10" />
+  </collisionShapes>
+</Drone>
 
     <Drone name="meineDrohne" primarythrust="80" auxilarythrust="10" rotationthrust="10" mass= "50" linearDamping = "0.9" angularDamping = "0.7">
Index: /code/branches/presentation3/data/particle/simplerocketfire.particle
===================================================================
--- /code/branches/presentation3/data/particle/simplerocketfire.particle	(revision 7018)
+++ /code/branches/presentation3/data/particle/simplerocketfire.particle	(revision 7018)
@@ -0,0 +1,50 @@
+	particle_system Orxonox/simplerocketfire
+{
+	quota	300
+	material	PE/explosion
+	particle_width	5
+	particle_height	2
+	cull_each	false
+	renderer	billboard
+	sorted	false
+	local_space	false
+	iteration_interval	0
+	nonvisible_update_timeout	0
+	billboard_type	point
+	billboard_origin	center
+	billboard_rotation_type	texcoord
+	common_up_vector	0 1 0
+	point_rendering	false
+	accurate_facing	false
+
+	emitter Ellipsoid
+	{
+		angle	2
+		colour	1 0.682759 1 1
+		colour_range_start	1 0.682759 1 1
+		colour_range_end	1 0.682759 1 1
+		direction	0 0 1
+		emission_rate	1200
+		position	0 0 3
+		velocity	10
+		velocity_min	10
+		velocity_max	48
+		time_to_live	0.1
+		time_to_live_min	0.1
+		time_to_live_max	0.2
+		duration	0
+		duration_min	0
+		duration_max	0
+		repeat_delay	0
+		repeat_delay_min	0
+		repeat_delay_max	0
+		width	0.8
+		height	0.8
+		depth	7
+	}
+
+	affector Scaler
+	{
+		rate	-20
+	}
+}
Index: /code/branches/presentation3/src/modules/weapons/RocketController.cc
===================================================================
--- /code/branches/presentation3/src/modules/weapons/RocketController.cc	(revision 7017)
+++ /code/branches/presentation3/src/modules/weapons/RocketController.cc	(revision 7018)
@@ -1,29 +1,29 @@
 /*
- *   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:
- *     Gabriel Nadler, Originalfile: Oli Scheuss
- *   Co-authors:
- *      ...
- *
- */
+*   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:
+*     Gabriel Nadler, Originalfile: Oli Scheuss
+*   Co-authors:
+*      ...
+*
+*/
 
 #include "RocketController.h"
@@ -39,5 +39,5 @@
     /**
     @brief
-        Constructor.
+    Constructor.
     */
     RocketController::RocketController(BaseObject* creator) : Controller(creator)
@@ -46,9 +46,9 @@
         COUT(5)<< "RocketController constructed\n";
 
-        
-        this->rocket = new SimpleRocket(this);
-        this->rocket->setController(this);
-        this->setControllableEntity(dynamic_cast<ControllableEntity*> (rocket));
-        this->haha=0;
+
+        this->rocket_ = new SimpleRocket(this);
+        this->rocket_->setController(this);
+        this->setControllableEntity(dynamic_cast<ControllableEntity*> (this->rocket_));
+        this->counter_=0;
     }
 
@@ -56,19 +56,18 @@
     /**
     @brief
-        The controlling happens here. This method defines what the controller has to do each tick.
+    The controlling happens here. This method defines what the controller has to do each tick.
     @param dt
-        The duration of the tick.
+    The duration of the tick.
     */
     void RocketController::tick(float dt)
     {
-        haha++;
+        counter_++;
 
-        //if (haha<30)this->rocket->setVelocity(rocket->getVelocity()*1.03);
-        if (this->target_) {
+        if (this->target_ && this->rocket_->hasFuel()) {
             this->setTargetPosition();
             this->moveToTargetPosition();
         }
-        if (haha>500) rocket->setDestroy();;
-
+        
+        
     }
 
@@ -81,6 +80,6 @@
     void RocketController::setTargetPosition()
     {
-        //this->targetPosition_=this->target_->getWorldPosition();
-        this->targetPosition_ = getPredictedPosition(this->getControllableEntity()->getWorldPosition(),this->getControllableEntity()->getVelocity().length() , this->target_->getWorldPosition(), this->target_->getVelocity());
+        this->targetPosition_=this->target_->getWorldPosition(); //don't really note a difference in the rocket behaviour xD
+        //this->targetPosition_ = getPredictedPosition(this->getControllableEntity()->getWorldPosition(),this->getControllableEntity()->getVelocity().length() , this->target_->getWorldPosition(), this->target_->getVelocity());
     }
     void RocketController::moveToTargetPosition()
@@ -100,36 +99,14 @@
         if (!this->getControllableEntity())
             return;
-        //float dx = target.x-this->getControllableEntity()->getPosition().x;
-        //float dy = target.y-this->getControllableEntity()->getPosition().y;
-        COUT(4)<<"\n diff: ";
-        COUT(4)<<target-this->getControllableEntity()->getPosition() << endl;
-        //COUT(0)<<"\n 2D view: ";
-        /* COUT(0)<<this->getControllableEntity()->getPosition().x;
-        COUT(0)<<" ";
-        COUT(0)<<this->getControllableEntity()->getPosition().y;
-        COUT(0)<<" ";
-        COUT(0)<<this->getControllableEntity()->getPosition().z;
-        COUT(0)<<"\n";*/
         Vector2 coord = get2DViewdirection(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target);
-        //float distance = (target - this->getControllableEntity()->getPosition()).length();
-        //Vector3D diff =target-this->rocket->getPosition();
-        COUT(4) << "viewdirection: "<< coord << endl;
-        //COUT(0)<<"  ";
-        //COUT(0)<<coord.y;
-        this->getControllableEntity()->rotateYaw(-0.8f*sgn(coord.x)*coord.x*coord.x);
-        this->getControllableEntity()->rotatePitch(0.8f*sgn(coord.y)*coord.y*coord.y);
-//         this->getControllableEntity()->rotateYaw(10);
-//         this->getControllableEntity()->rotatePitch(0);
-        //this->getControllableEntity()->rotatePitch(rotation.getPitch().valueRadians());
-        //this->getControllableEntity()->rotateYaw(rotation.getYaw().valueRadians());
-        //this->getControllableEntity()->moveUpDown(coord.y);
-        //this->getControllableEntity()->moveRightLeft(coord.x);
-        //this->getControllableEntity()->rotatePitch(coord);
-   //     if (this->target_ || distance > 10)
-   //     {
-   //         // Multiply with 0.8 to make them a bit slower
-            //this->getControllableEntity()->rotateYaw(coord.x );
-   //         this->getControllableEntity()->rotatePitch(coord.y);
-   //     }
+        float distance = (target - this->getControllableEntity()->getWorldPosition()).length();
+
+
+        if (distance > 1000&&this->getControllableEntity()->getVelocity().squaredLength()<160000) 
+            this->getControllableEntity()->setAcceleration(this->rocket_->getOrientation()*Vector3(-20,-20,-20));
+        if (distance <1000) this->rocket_->setAcceleration(0,0,0);
+        
+        this->getControllableEntity()->rotateYaw(-sgn(coord.x)*coord.x*coord.x);
+        this->getControllableEntity()->rotatePitch(sgn(coord.y)*coord.y*coord.y);
     }
 
Index: /code/branches/presentation3/src/modules/weapons/RocketController.h
===================================================================
--- /code/branches/presentation3/src/modules/weapons/RocketController.h	(revision 7017)
+++ /code/branches/presentation3/src/modules/weapons/RocketController.h	(revision 7018)
@@ -41,5 +41,5 @@
     /**
     @brief
-        Controller for the Drone of the PPS tutorial.
+        Controller for the Rocket (targetseeking)
     @author
         Gabriel Nadler, Originalfile: Oli Scheuss
@@ -52,5 +52,5 @@
             
             virtual void tick(float dt);
-			SimpleRocket* getRocket(){return this->rocket;};
+			SimpleRocket* getRocket(){return this->rocket_;};
 			void setTarget(WorldEntity* target);
         protected:
@@ -60,9 +60,10 @@
 
         private:
-			SimpleRocket* rocket;
+			SimpleRocket* rocket_;
 			Vector3 targetPosition_;
 			WeakPtr<PlayerInfo> player_;
-						int haha;
+						
 			WeakPtr<WorldEntity> target_;
+            int counter_;
 
 
Index: /code/branches/presentation3/src/modules/weapons/projectiles/Rocket.cc
===================================================================
--- /code/branches/presentation3/src/modules/weapons/projectiles/Rocket.cc	(revision 7017)
+++ /code/branches/presentation3/src/modules/weapons/projectiles/Rocket.cc	(revision 7018)
@@ -87,4 +87,5 @@
             this->defSndWpnEngine_->setLooping(true);
             this->defSndWpnEngine_->setSource("sounds/Rocket_engine.ogg");
+            this->defSndWpnEngine_->setVolume(100);
             this->attach(defSndWpnEngine_);
 
@@ -92,4 +93,5 @@
             this->defSndWpnLaunch_->setLooping(false);
             this->defSndWpnLaunch_->setSource("sounds/Rocket_launch.ogg");
+            this->defSndWpnLaunch_->setVolume(100);
             this->attach(defSndWpnLaunch_);
         }
Index: /code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.cc
===================================================================
--- /code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.cc	(revision 7017)
+++ /code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.cc	(revision 7018)
@@ -58,12 +58,13 @@
         this->localAngularVelocity_ = 0;
         this->bDestroy_ = false;
-        this->lifetime_ = 100;
+        this->lifetime_ = 120;
+        this->setMass(15);
         COUT(4) << "simplerocket constructed\n";
-
+        this->maxLife_=90;
 
         if (GameMode::isMaster())
        {
-           this->setCollisionType(WorldEntity::Kinematic);
-            this->setVelocity(0,0,100);
+            this->setCollisionType(WorldEntity::Kinematic);
+            this->fuel_=true;
 
             Model* model = new Model(this);
@@ -72,9 +73,9 @@
             this->attach(model);
 
-            ParticleEmitter* fire = new ParticleEmitter(this);
-            this->attach(fire);
-            fire->setOrientation(this->getOrientation());
-            fire->setSource("Orxonox/rocketfire2");
-
+            this->fire_ = new ParticleEmitter(this);
+            this->attach(this->fire_);
+           
+            this->fire_->setOrientation(this->getOrientation());
+            this->fire_->setSource("Orxonox/simplerocketfire");
             this->enableCollisionCallback();
             this->setCollisionResponse(false);
@@ -83,16 +84,22 @@
             // TODO: fix the orientation and size of this collision shape to match the rocket
             ConeCollisionShape* collisionShape = new ConeCollisionShape(this);
-            collisionShape->setRadius(3);
+            collisionShape->setOrientation(this->getOrientation());
+            collisionShape->setRadius(1.5f);
             collisionShape->setHeight(5);
             this->attachCollisionShape(collisionShape);
-
             this->destroyTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&SimpleRocket::destroyObject, this)));
         }
 
     }
-    
+   
+
+
+
     void SimpleRocket::tick(float dt)
     {
+
         SUPER(SimpleRocket, tick, dt);
+        if (this->getVelocity().squaredLength() >130000) this->maxLife_-=dt; //if Velocity bigger than about 360, uses a lot more "fuel" :)
+        
 
             this->setAngularVelocity(this->getOrientation() * this->localAngularVelocity_);
@@ -100,7 +107,19 @@
             this->localAngularVelocity_ = 0;
 
+            
+            if (this->fuel_) {
+                if (this->destroyTimer_.getRemainingTime()<  this->lifetime_-this->maxLife_ ) 
+                    this->fuel_=false;
+            } else this->disableFire();
+
             if( this->bDestroy_ )
                 this->destroy();
-        
+                
+    }
+
+    void SimpleRocket::disableFire(){
+        this->setAcceleration(0,0,0);        
+        this->fire_->detachFromParent();
+
     }
 
@@ -134,4 +153,5 @@
         this->player_ = this->owner_->getPlayer();
     }
+
 
 
@@ -185,9 +205,4 @@
     }
     
-    void SimpleRocket::setDestroy()
-    {
-        this->bDestroy_=true;
-        CCOUT(4)<<"trying to destroy";
-    }
 
     void SimpleRocket::fired(unsigned int firemode)
Index: /code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.h
===================================================================
--- /code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.h	(revision 7017)
+++ /code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.h	(revision 7018)
@@ -34,4 +34,5 @@
 #include "tools/Timer.h"
 #include "worldentities/ControllableEntity.h"
+#include "graphics/ParticleSpawner.h"
 
 namespace orxonox
@@ -56,4 +57,6 @@
             virtual bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
             void destroyObject();
+
+            void disableFire();
 
             virtual void moveFrontBack(const Vector2& value){}
@@ -96,5 +99,5 @@
             */
             inline void rotatePitch(float value)
-            {   COUT(0)<<"rotated rocket yaw";
+            {   
 				this->rotatePitch(Vector2(value, 0)); }
             /**
@@ -104,5 +107,4 @@
             inline void rotateRoll(float value)
             { 
-				COUT(0)<<"rotated rocket roll";
 				this->rotateRoll(Vector2(value, 0)); }
 
@@ -110,4 +112,9 @@
             inline Pawn* getOwner() const
                 { return this->owner_; }
+            inline bool hasFuel()
+            { return this->fuel_;}
+
+            inline void fuelRefill()
+            {this->fuel_=true;}
 
             inline void setDamage(float damage)
@@ -123,4 +130,5 @@
             float damage_;
             bool bDestroy_;
+            bool fuel_;
 
 
@@ -128,4 +136,10 @@
             Timer destroyTimer_;
             float lifetime_;
+            float maxLife_;
+
+            ParticleEmitter* fire_;
+
+
+
 
     };
Index: /code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.cc
===================================================================
--- /code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 7017)
+++ /code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 7018)
@@ -46,8 +46,8 @@
         RegisterObject(SimpleRocketFire);
 
-        this->reloadTime_ = 0.20f;
+        this->reloadTime_ = 4;
         this->bParallelReload_ = false;
         this->damage_ = 100;
-        this->speed_ = 100;
+        this->speed_ = 300;
 
         this->setMunitionName("LaserMunition");
@@ -64,17 +64,11 @@
         SimpleRocket* rocket = con->getRocket();
         this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
-//      rocket->setOrientation(this->getMuzzleOrientation());
         rocket->setOrientation(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getWorldOrientation());
-        Vector3 pos = this->getMuzzlePosition();
-        rocket->setPosition(pos);
-//      rocket->setAcceleration(20*rocket->getOrientation() * WorldEntity::FRONT);
+        rocket->setPosition(this->getMuzzlePosition());
         rocket->setVelocity(this->getMuzzleDirection()*this->speed_);
         rocket->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         rocket->setDamage(this->damage_);
         WorldEntity* pawnn=static_cast<ControllableEntity*>(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn())->getTarget();
-        if (pawnn)
-        {
-            con->setTarget(pawnn);
-        }
+        if (pawnn) con->setTarget(pawnn);
     }
 }
Index: /code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.h
===================================================================
--- /code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.h	(revision 7017)
+++ /code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.h	(revision 7018)
@@ -40,9 +40,10 @@
             SimpleRocketFire(BaseObject* creator);
             virtual ~SimpleRocketFire();
-
+            void deactivateFire();
             virtual void fire();
 
         private:
             float speed_;
+
     };
 }
