Index: code/branches/rocket/src/modules/weapons/RocketController.cc
===================================================================
--- code/branches/rocket/src/modules/weapons/RocketController.cc	(revision 6904)
+++ code/branches/rocket/src/modules/weapons/RocketController.cc	(revision 6905)
@@ -63,11 +63,15 @@
     {
 		haha++;
+		
 
         SimpleRocket *rocket = static_cast<SimpleRocket*>(this->getControllableEntity());
+		if (haha<30)rocket->setVelocity(rocket->getVelocity()*1.03);
 		if (this->target_) {
-		rocket->rotatePitch(0.5);
-		rocket->rotateYaw(0.5);
+			this->setTargetPosition();
+			this->moveToTargetPosition();
+		
 		}
-		rocket->setVelocity(rocket->getVelocity()*1.03);
+		
+		if (haha>500) rocket->setDestroy();;
 	
 	}
@@ -80,8 +84,37 @@
 	}
 
+	void RocketController::setTargetPosition() {
+		this->targetPosition_=this->target_->getPosition();
+		//this->targetPosition_ = getPredictedPosition(this->getControllableEntity()->getPosition(),this->getControllableEntity()->getVelocity().length() , this->target_->getPosition(), this->target_->getVelocity());
+	}
+	void RocketController::moveToTargetPosition() {
+		this->moveToPosition(this->targetPosition_);
+	}
 
-	void RocketController::setTarget(Pawn* target) {
+
+
+	void RocketController::setTarget(WorldEntity* target) {
 		this->target_ = target;
+		COUT(0)<<"got target\n";
 	}
+
+	void RocketController::moveToPosition(const Vector3& target)
+    {
+       if (!this->getControllableEntity())
+            return;
+
+	   COUT(0)<<"moving";
+
+        Vector2 coord = get2DViewdirection(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target);
+        float distance = (target - this->getControllableEntity()->getPosition()).length();
+
+        if (this->target_ || distance > 10)
+        {
+            // Multiply with 0.8 to make them a bit slower
+			 this->getControllableEntity()->rotateYaw(-0.2f * sgn(coord.x) * coord.x*coord.x);
+            this->getControllableEntity()->rotatePitch(0.2f * sgn(coord.y) * coord.y*coord.y);
+			
+        }
+    }
 
 
Index: code/branches/rocket/src/modules/weapons/RocketController.h
===================================================================
--- code/branches/rocket/src/modules/weapons/RocketController.h	(revision 6904)
+++ code/branches/rocket/src/modules/weapons/RocketController.h	(revision 6905)
@@ -53,13 +53,16 @@
             virtual void tick(float dt);
 			SimpleRocket* getRocket(){return this->rocket;};
-			void setTarget(Pawn* target);
+			void setTarget(WorldEntity* target);
         protected:
-
+			void moveToPosition(const Vector3& target);
+			void setTargetPosition();
+			void moveToTargetPosition();
 
         private:
 			SimpleRocket* rocket;
+			Vector3 targetPosition_;
 			WeakPtr<PlayerInfo> player_;
 						int haha;
-			WeakPtr<Pawn> target_;
+			WeakPtr<WorldEntity> target_;
 
 
Index: code/branches/rocket/src/modules/weapons/projectiles/SimpleRocket.cc
===================================================================
--- code/branches/rocket/src/modules/weapons/projectiles/SimpleRocket.cc	(revision 6904)
+++ code/branches/rocket/src/modules/weapons/projectiles/SimpleRocket.cc	(revision 6905)
@@ -180,4 +180,8 @@
         }
     }
+	void SimpleRocket::setDestroy() {
+		this->bDestroy_=true;
+		COUT(0)<<"trying to destroy";
+	}
 
     void SimpleRocket::fired(unsigned int firemode)
Index: code/branches/rocket/src/modules/weapons/projectiles/SimpleRocket.h
===================================================================
--- code/branches/rocket/src/modules/weapons/projectiles/SimpleRocket.h	(revision 6904)
+++ code/branches/rocket/src/modules/weapons/projectiles/SimpleRocket.h	(revision 6905)
@@ -64,4 +64,5 @@
             virtual void rotatePitch(const Vector2& value);
             virtual void rotateRoll(const Vector2& value);
+			void setDestroy();
 
             /**
@@ -95,5 +96,6 @@
             */
             inline void rotatePitch(float value)
-            { this->rotatePitch(Vector2(value, 0)); }
+            {   COUT(0)<<"rotated rocket yaw";
+				this->rotatePitch(Vector2(value, 0)); }
             /**
             @brief Rotates the SimpleRocket around the z-axis by the specifed amount.
@@ -101,5 +103,7 @@
             */
             inline void rotateRoll(float value)
-            { this->rotateRoll(Vector2(value, 0)); }
+            { 
+				COUT(0)<<"rotated rocket roll";
+				this->rotateRoll(Vector2(value, 0)); }
 
             void setOwner(Pawn* owner);
Index: code/branches/rocket/src/modules/weapons/weaponmodes/SimpleRocketFire.cc
===================================================================
--- code/branches/rocket/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 6904)
+++ code/branches/rocket/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 6905)
@@ -69,4 +69,9 @@
 		rocket->setVelocity(this->getMuzzleDirection()*this->speed_);
 		rocket->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
+		rocket->setDamage(this->damage_);
+		WorldEntity* pawnn=(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getTarget());
+		if (pawnn) {
+		con->setTarget(pawnn);
+		}
     }
 }
