Index: code/branches/3DPacman_FS18/src/modules/Pacman/3DPacman.cc
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/3DPacman.cc	(revision 11850)
+++ code/branches/3DPacman_FS18/src/modules/Pacman/3DPacman.cc	(revision 11859)
@@ -34,4 +34,7 @@
 #include "3DPacman.h"
 #include "core/CoreIncludes.h"
+#include "PacmanGelb.h"
+#include "PacmanGhost.h"
+#include "PacmanPointSphere.h"
 
 namespace orxonox
@@ -43,99 +46,79 @@
         RegisterObject(3DPacman);
 
-        bEndGame = false;
-        lives = 1;
+        lives = 3;
+        point = 0:
         level = 1;
-        point = 0;
-        bShowLevel = false;
-        multiplier = 1;
-        b_combo = false;
-        counter = 5000;
-        pattern = 1;
-        lastPosition = 0;
-        // spawn enemy every 3.5 seconds
-        //enemySpawnTimer.setTimer(3.5f, true, createExecutor(createFunctor(&DodgeRace::spawnEnemy, this)));
-        comboTimer.setTimer(3.0f, true, createExecutor(createFunctor(&DodgeRace::comboControll, this)));
-        this->numberOfBots_ = 0; //sets number of default bots temporarly to 0
-        this->center_ = nullptr;
 
-        this->setHUDTemplate("DodgeRaceHUD");
     }
 
-    void DodgeRace::levelUp()
+    void 3DPacman::levelUp()
     {
-        level++;
-        if (getPlayer() != nullptr)
-        {
-            for (int i = 0; i < 7; i++)
-            {
-                WeakPtr<ExplosionPart> chunk5 = new ExplosionPart(this->center_->getContext());
-                chunk5->setPosition(Vector3(600, 0, 100.f * i - 300));
-                chunk5->setVelocity(Vector3(1000, 0, 0));  //player->getVelocity()
-                chunk5->setScale(10);
-                chunk5->setEffect1("Orxonox/explosion2b");
-                chunk5->setEffect2("Orxonox/smoke6");
-                chunk5->Explode();
-
-            }
-        }
-        addPoints(multiplier * 42);
-        multiplier *= 2;
-        toggleShowLevel();
-        showLevelTimer.setTimer(1.0f, false, createExecutor(createFunctor(&DodgeRace::toggleShowLevel, this)));
+        this->end();
     }
 
-    void DodgeRace::tick(float dt)
+
+    PacmanGhost[4] ghosts;
+    PacmanPointSphere[1] spheres;
+
+
+    void 3DPacman::tick(float dt)
     {
-        DodgeRaceShip* player = this->getPlayer();
+        int i = 0;
+        for(PacmanGhost* nextghost : ObjectList<PacmanGhost>()){
+            ghosts[i] = nextghost;
+            i++;
+        }
+
+        i = 0:
+        for(PacmanPointSphere* nextsphere : ObjectList<PacmanPointSphere>()){
+            spheres[i] = nextsphere;
+            i++;
+        }
+
+        player = this->getPlayer();
         if (player != nullptr)
         {
-            currentPosition = player->getWorldPosition().x;
-            counter = counter + (currentPosition - lastPosition);
-            lastPosition = currentPosition;
-            point = (int) currentPosition;
-            player->speed = 830.0f - (point / 1000);
+            currentPosition = player->getWorldPosition();
+        }
 
-            for(unsigned int i=0; i < cubeList.size();i++)
-            {
-                if(cubeList.at(i)->getPosition().x < currentPosition-3000)
-                {
-                    cubeList.at(i)->destroy();
-                    cubeList.erase(cubeList.begin()+i);
-                }
-            }
+        bool bcolli = false;
+        for(int nrghost = 0, (nrghost<3) && (!bcolli), ++nrghost){
+            bcolli = collis(ghosts[nrghost]->getPosition(), currentPosition)
+        }
+        if(collis){
+            this->catched();
+        }
 
-            if(counter >= 3000)
-            {
-                counter = 0;
-                for(int i = 0; i<6; i++)
-                {
-                    DodgeRaceCube* cube = new DodgeRaceCube(this->center_->getContext());
-                    cubeList.push_back(cube);
-                    switch(pattern)
-                    {
-                    case 1: cube->addTemplate("DodgeRaceCube01");
-                    break;
-                    case 2: cube->addTemplate("DodgeRaceCube02");
-                    break;
+        SUPER(3DPacman, tick, dt);
 
-                    }
-
-                    cube->setPosition(player->getWorldPosition() + Vector3(5000.0f, 0.0f, -3600.0f + (i*1200)));
-                    //stEntity->setScale3D(50,50,50);
-                }
+    }
 
 
-                pattern %= 2;
-                pattern ++;
 
-            }
-
-        }
-        SUPER(DodgeRace, tick, dt);
+    bool 3DPacman::collis(Vector3 one, Vector3 other){
+        if((abs(one.x-other.x)<0.1) && (abs(one.x-other.x)<0.1) && (abs(one.x-other.x)<0.1))
+            return true;
+        return false;
     }
 
-    DodgeRaceShip* DodgeRace::getPlayer()
+    void 3DPacman::catched(){
+        if(lives) this->end();
+        --lives;
+        this->posreset();
+    } 
+
+    void 3DPacman::posreset(){
+        int i = 0;
+        for(PacmanGhost* nextghost : ObjectList<PacmanGhost>()){
+            ghosts[i] = nextghost;
+            i++;
+        }
+        
+    }
+
+
+    PacmanGelb* 3DPacman::getPlayer()
     {
-        for (DodgeRaceShip* ship : ObjectList<DodgeRaceShip>())
+        for (PacmanGelb* ship : ObjectList<PacmanGelb>())
         {
             return ship;
@@ -144,44 +127,13 @@
     }
 
-    void DodgeRace::costLife()
-    {
-        //endGameTimer.setTimer(8.0f, false, createExecutor(createFunctor(&DodgeRace::end, this)));
-        lives = 0;
-    };
 
-    void DodgeRace::comboControll()
-    {
-        if (b_combo)
-            multiplier++;
-        // if no combo was performed before, reset multiplier
-        else
-            multiplier = 1;
-        b_combo = false;
-    }
-
-    void DodgeRace::start()
+    void 3DPacman::start()
     {
         orxout() << "start" << endl;
-        for(unsigned int i=0; i< cubeList.size();i++)
-        {
-            cubeList.at(i)->destroy();
-            cubeList.erase(cubeList.begin()+i);
-
-        }
-        cubeList.clear();
-        // Set variable to temporarily force the player to spawn.
-        this->bForceSpawn_ = false;
-
-        if (this->center_ == nullptr)  // abandon mission!
-        {
-            orxout(internal_error) << "DodgeRace: No Centerpoint specified." << endl;
-            GSLevel::startMainMenu();
-            return;
-        }
-        // Call start for the parent class.
+        
         Deathmatch::start();
     }
 
-    void DodgeRace::playerPreSpawn(PlayerInfo* player)
+    void 3DPacman::playerPreSpawn(PlayerInfo* player)
     {
         this->playerInfo_ = player;
@@ -190,30 +142,8 @@
             this->end();
         }
-
-        // Reset all the cubes
-        /*
-        orxout() << "prespawn" << endl;
-        for(int i=0; i< cubeList.size();i++)
-        {
-            cubeList.at(i)->destroy();
-            cubeList.erase(cubeList.begin()+i);
-        }
-        cubeList.clear();
-        lives = 1;
-        point = 0;
-        lastPosition = 0;
-        */
     }
 
-    void DodgeRace::addPoints(int numPoints)
-    {
-        if (!bEndGame)
-        {
-            point += numPoints * multiplier;
-            b_combo = true;
-        }
-    }
 
-    void DodgeRace::end()
+    void 3DPacman::end()
     {
         // DON'T CALL THIS!
@@ -224,5 +154,5 @@
         {
             int score = this->getPoints();
-            Highscore::getInstance().storeScore("Dodge Race", score, this->playerInfo_);
+            Highscore::getInstance().storeScore("3DPacman", score, this->playerInfo_);
         }
         GSLevel::startMainMenu();
Index: code/branches/3DPacman_FS18/src/modules/Pacman/3DPacman.h
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/3DPacman.h	(revision 11850)
+++ code/branches/3DPacman_FS18/src/modules/Pacman/3DPacman.h	(revision 11859)
@@ -42,4 +42,5 @@
 
 //#include "DodgeRaceHUDinfo.h"
+#include "PacmanGelb.h"
 
 
@@ -63,8 +64,8 @@
 {
 
-    class _DodgeRaceExport DodgeRace : public Deathmatch
+    class _3DPacmanExport 3DPacman : public Deathmatch
     {
        public:
-            DodgeRace(Context* context);
+            3DPacman(Context* context);
 
             virtual void start() override;
@@ -100,4 +101,10 @@
 
        private:
+            PacmanGelb* player;
+            PacmanGhost[] 
+            Vector3 currentPosition;
+
+
+
             Timer endGameTimer;
 
Index: code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGelb.cc
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGelb.cc	(revision 11859)
+++ code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGelb.cc	(revision 11859)
@@ -0,0 +1,65 @@
+/*
+ *   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:
+ *      Florian Zinggeler
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file DodgeRaceShip.cc
+    @brief Implementation of the DodgeRaceShip class.
+*/
+
+#include "PacmanGelb.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    RegisterClass(PacmanGelb);
+
+    PacmanGelb::PacmanGelb(Context* context) : SpaceShip(context)
+    {
+        RegisterObject(PacmanGelb);
+    }
+
+    void PacmanGelb::tick(float dt)
+    {
+        //bring player back to ground
+        actuelposition = this->getPosition();
+        actuelposition.y = 0;
+        this->setPosition(actuelposition);
+
+        // Camera
+        Camera* camera = this->getCamera();
+        if (camera != nullptr)
+        {
+            actuelorient = camera->getOrientation();
+            actuelorient.y = 0;
+            camera->setOrientation(actuelorient);
+        }
+
+        SUPER(PacmanGelb, tick, dt);
+    }
+}
+    
Index: code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGelb.h
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGelb.h	(revision 11859)
+++ code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGelb.h	(revision 11859)
@@ -0,0 +1,60 @@
+/*
+ *   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:
+ *      Florian Zinggeler
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file DodgeRaceShip.h
+    @brief Declaration of the DodgeRaceShip class.
+*/
+
+#ifndef _PacmanGelb_H__
+#define _PacmanGelb_H__
+
+
+#include "dodgerace/DodgeRacePrereqs.h"
+
+#include "core/XMLPort.h"
+#include "worldentities/pawns/SpaceShip.h"
+#include "graphics/Camera.h"
+
+namespace orxonox
+{
+    class _PacmanGelbExport PacmanGelb : public SpaceShip
+    {
+        public:
+            PacmanGelb(Context* context);
+
+            virtual void tick(float dt);
+
+        private:
+            Vector3 actuelposition;
+            btQuaternion actuelorient;
+       
+    }
+}
+
+#endif
Index: code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhost.cc
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhost.cc	(revision 11850)
+++ code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhost.cc	(revision 11859)
@@ -46,7 +46,4 @@
         RegisterObject(PacmanGhost);
 
-        this->localLinearAcceleration_.setValue(1, 1, 1);
-        this->localAngularAcceleration_.setValue(1, 1, 1);
-
         this->velocity = Vector3(0, 0, 0);
 
@@ -79,7 +76,4 @@
         SUPER(PacmanGhost, XMLPort, xmlelement, mode);
 
-        XMLPortParam(PacmanGhost, "primaryThrust", setPrimaryThrust, getPrimaryThrust, xmlelement, mode);
-        XMLPortParam(PacmanGhost, "auxiliaryThrust", setAuxiliaryThrust, getAuxiliaryThrust, xmlelement, mode);
-        XMLPortParam(PacmanGhost, "rotationThrust", setRotationThrust, getRotationThrust, xmlelement, mode);
         XMLPortParam(PacmanGhost, "resetposition", setResetPosition, getResetPosition, xmlelement, mode);
     }
@@ -87,5 +81,5 @@
 
     
-    Vector3 possibleposition[] = {Vector3(0,10,245),Vector3(215,0,240)};
+    Vector3 possibleposition[] = {Vector3(0,10,245),Vector3(215,10,245),Vector3(215,10,220)};
 
     /**
@@ -99,22 +93,10 @@
         SUPER(PacmanGhost, tick, dt);
 
-        this->localLinearAcceleration_.setX(this->localLinearAcceleration_.x() * getMass() * this->auxiliaryThrust_);
-        this->localLinearAcceleration_.setY(this->localLinearAcceleration_.y() * getMass() * this->auxiliaryThrust_);
-        if (this->localLinearAcceleration_.z() > 0)
-            this->localLinearAcceleration_.setZ(this->localLinearAcceleration_.z() * getMass() * this->auxiliaryThrust_);
-        else
-            this->localLinearAcceleration_.setZ(this->localLinearAcceleration_.z() * getMass() * this->primaryThrust_);
-        this->physicalBody_->applyCentralForce(physicalBody_->getWorldTransform().getBasis() * this->localLinearAcceleration_);
-        this->localLinearAcceleration_.setValue(0, 0, 0);
-
-        this->localAngularAcceleration_ *= this->getLocalInertia() * this->rotationThrust_;
-        this->physicalBody_->applyTorque(physicalBody_->getWorldTransform().getBasis() * this->localAngularAcceleration_);
-        this->localAngularAcceleration_.setValue(0, 0, 0);
-
+        //setorientation
 
         this->actuelposition = this->getPosition();
         
         //Stop, if target arrived
-        if(((this->actuelposition.x - this->target_x)<0.1) && ((this->actuelposition.z - this->target_z)<0.1)){
+        if((abs(this->actuelposition.x - this->target_x)<0.1) && (abs(this->actuelposition.z - this->target_z)<0.1)){
                  this->ismoving = false;
         }
@@ -122,10 +104,10 @@
         //Move, if ghost hasn't arrived yet
         if(this->ismoving){
-            if(!((this->actuelposition.z-target_z)<0.1)) {
-                velocity = Vector3(-sgn(this->actuelposition.x-this->target_x),-sgn(this->actuelposition.y),-sgn(this->actuelposition.z-this->target_z));
+            if(!(abs(this->actuelposition.z-target_z)<0.1)) {
+                velocity = Vector3(-sgn(this->actuelposition.x-this->target_x),0,-sgn(this->actuelposition.z-this->target_z));
                 move(dt, actuelposition, velocity);
             }    
-            if(!((this->actuelposition.x-target_x)<0.1)){
-                velocity = Vector3(-sgn(this->actuelposition.x-this->target_x),-sgn(this->actuelposition.y),-sgn(this->actuelposition.z-this->target_z));
+            if(!(abs(this->actuelposition.x-target_x)<0.1)){
+                velocity = Vector3(-sgn(this->actuelposition.x-this->target_x),0,-sgn(this->actuelposition.z-this->target_z));
                 move(dt, actuelposition, velocity);
             }
@@ -134,14 +116,40 @@
         //Check on which position ghost has arrived and set new target
          else{
-            if(((this->actuelposition.x - possibleposition[0].x)<0.1) && ((this->actuelposition.z - possibleposition[0].z)<0.1)){
-                this->target_x = possibleposition[1].x;
-                this->target_z = possibleposition[1].z; 
-                this->ismoving = true;
+            if((abs(this->actuelposition.x - possibleposition[0].x)<0.1) && (abs(this->actuelposition.z - possibleposition[0].z)<0.1)){
+                decision = rand()%1;
+            switch(decision){
+                case 0:
+                    this->target_x = possibleposition[1].x;
+                    this->target_z = possibleposition[1].z; 
+                    this->ismoving = true;
             }
-            else if(((actuelposition.x - possibleposition[1].x)<0.1) && ((actuelposition.z - possibleposition[1].z)<0.1)){
-                this->target_x = possibleposition[0].x;
-                this->target_z = possibleposition[0].z; 
-                this->ismoving = true;
+            
             }
+            else if((abs(actuelposition.x - possibleposition[1].x)<0.1) && (abs(actuelposition.z - possibleposition[1].z)<0.1)){
+                decision = rand()%2;
+            switch(decision){
+                case 0:
+                    this->target_x = possibleposition[0].x;
+                    this->target_z = possibleposition[0].z; 
+                    this->ismoving = true;
+                    break;
+                case 1:
+                    this->target_x = possibleposition[2].x;
+                    this->target_z = possibleposition[2].z; 
+                    this->ismoving = true;    
+            }
+
+            }
+            if((abs(this->actuelposition.x - possibleposition[2].x)<0.1) && (abs(this->actuelposition.z - possibleposition[2].z)<0.1)){
+                decision = rand()%1;
+            switch(decision){
+                case 0:
+                    this->target_x = possibleposition[1].x;
+                    this->target_z = possibleposition[1].z; 
+                    this->ismoving = true;
+            }
+            
+            }
+
             else{
             } //End of Position table
@@ -151,76 +159,10 @@
 
 
-
     void PacmanGhost::move(float dt, Vector3 actuelposition, Vector3 velocity){
-
-        this->setPosition(Vector3(actuelposition.x+velocity.x*dt,actuelposition.y+velocity.y*dt ,actuelposition.z+velocity.z*dt));
+        this->setPosition(Vector3(actuelposition.x+20*velocity.x*dt,10,actuelposition.z+20*velocity.z*dt));
     }
 
-
-    /**
-    @brief
-        Moves the AutonomousDrone in the negative z-direction (Front/Back) by an amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the movement.
-    */
-    void PacmanGhost::moveFrontBack(const Vector2& value)
-    {
-        //this->setPosition(dt*(actuelposition + velocity_));
+    void PacmanGhost::resetGhost(){
+        this->setPosition(resetposition);
     }
-
-    /**
-    @brief
-        Moves the AutonomousDrone in the x-direction (Right/Left) by an amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the movement.
-    */
-    void PacmanGhost::moveRightLeft(const Vector2& value)
-    {
-        this->localLinearAcceleration_.setX(this->localLinearAcceleration_.x() + value.x);
-    }
-
-    /**
-    @brief
-        Moves the AutonomousDrone in the y-direction (Up/Down) by an amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the movement.
-    */
-    void PacmanGhost::moveUpDown(const Vector2& value)
-    {
-        this->localLinearAcceleration_.setY(this->localLinearAcceleration_.y() + value.x);
-    }
-
-    /**
-    @brief
-        Rotates the AutonomousDrone around the y-axis by the amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the angular movement.
-    */
-    void PacmanGhost::rotateYaw(const Vector2& value)
-    {
-        this->localAngularAcceleration_.setY(this->localAngularAcceleration_.y() - value.x);
-    }
-
-    /**
-    @brief
-        Rotates the AutonomousDrone around the x-axis by the amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the angular movement.
-    */
-    void PacmanGhost::rotatePitch(const Vector2& value)
-    {
-        this->localAngularAcceleration_.setX(this->localAngularAcceleration_.x() + value.x);
-    }
-
-    /**
-    @brief
-        Rotates the AutonomousDrone around the z-axis by the amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the angular movement.
-    */
-    void PacmanGhost::rotateRoll(const Vector2& value)
-    {
-        this->localAngularAcceleration_.setZ(this->localAngularAcceleration_.z() + value.x);
-    }
-
 }
Index: code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhost.h
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhost.h	(revision 11850)
+++ code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhost.h	(revision 11859)
@@ -47,77 +47,10 @@
             virtual void tick(float dt); //!< Defines which actions the AutonomousDrone has to take in each tick.
 
-            virtual void moveFrontBack(const Vector2& value);
-            virtual void moveRightLeft(const Vector2& value);
-            virtual void moveUpDown(const Vector2& value);
-
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
-
             void move(float dt, Vector3 actuelposition, Vector3 velocity);
             
-            //virtual void resetGhost();
-            /**
-            @brief Moves the Drone in the Front/Back-direction by the specifed amount.
-            @param value  The amount by which the drone is to be moved.
-            */
-            inline void moveFrontBack(float value)
-            { this->moveFrontBack(Vector2(value, 0)); }
-            /**
-            @brief Moves the Drone in the Right/Left-direction by the specifed amount.
-            @param value  The amount by which the drone is to be moved.
-            */
-            inline void moveRightLeft(float value)
-            { this->moveRightLeft(Vector2(value, 0)); }
-            /**
-            @brief Moves the Drone in the Up/Down-direction by the specifed amount.
-            @param value  The amount by which the drone is to be moved.
-            */
-            inline void moveUpDown(float value)
-            { this->moveUpDown(Vector2(value, 0)); }
-
-            /**
-            @brief Rotates the Drone around the y-axis by the specifed amount.
-            @param value  The amount by which the drone is to be rotated.
-            */
-            inline void rotateYaw(float value)
-            { this->rotateYaw(Vector2(value, 0)); }
-            /**
-            @brief Rotates the Drone around the x-axis by the specifed amount.
-            @param value  The amount by which the drone is to be rotated.
-            */
-            inline void rotatePitch(float value)
-            { this->rotatePitch(Vector2(value, 0)); }
-            /**
-            @brief Rotates the Drone around the z-axis by the specifed amount.
-            @param value  The amount by which the drone is to be rotated.
-            */
-            inline void rotateRoll(float value)
-            { this->rotateRoll(Vector2(value, 0)); }
-
-            /**
-            @brief Sets the primary thrust to the input amount.
-            @param thrust The amount of thrust.
-            */
-            inline void setPrimaryThrust( float thrust )
-                { this->primaryThrust_ = thrust; }
-            inline void setAuxiliaryThrust( float thrust )
-                { this->auxiliaryThrust_ = thrust; }
-            inline void setRotationThrust( float thrust )
-                { this->rotationThrust_ = thrust; }
+            void resetGhost();
 
             inline void setResetPosition(Vector3 rpos)
                 { this->resetposition = rpos; }    
-      
-            /**
-            @brief Gets the primary thrust to the input amount.
-            @return The amount of thrust.
-            */
-            inline float getPrimaryThrust()
-                { return this->primaryThrust_; }
-            inline float getAuxiliaryThrust()
-                { return this->auxiliaryThrust_; }
-            inline float getRotationThrust()
-                { return this->rotationThrust_; }
             
             inline Vector3 getResetPosition()
@@ -127,15 +60,6 @@
 
         private:
-            
-            btVector3 localLinearAcceleration_; //!< The linear acceleration that is used to move the AutonomousDrone the next tick.
-            btVector3 localAngularAcceleration_; //!< The linear angular acceleration that is used to move the AutonomousDrone the next tick.
-            float primaryThrust_=100; //!< The amount of primary thrust. This is just used, when moving forward.
-            float auxiliaryThrust_=100; //!< The amount of auxilliary thrust. Used for all other movements (except for rotations).
-            float rotationThrust_=100; //!< The amount of rotation thrust. Used for rotations only.s
-            //Vector3 resetposition; //Start position for Ghost
-        
-            PacmanGhost* myGhost = nullptr;
-
             bool ismoving = false;
+            int decision = 0; //Gives the random which way information to the ghost.
             int target_x = 0; 
             int target_z = 0; 
Index: code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhostController.cc
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhostController.cc	(revision 11850)
+++ 	(revision )
@@ -1,122 +1,0 @@
-/*
- *   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:
- *      Oli Scheuss
- *   Co-authors:
- *      Damian 'Mozork' Frick
- *
- */
-
-#include "PacmanGhostController.h"
-
-#include "PacmanGhost.h"
-#include "util/Math.h"
-
-namespace orxonox
-{
-    // Create the factory for the drone controller.
-	RegisterClass(PacmanGhostController);
-
-    /**
-    @brief
-        Constructor.
-    @param context
-        The context of this object.
-    */
-    PacmanGhostController::PacmanGhostController(Context* context) : Controller(context)
-    {
-        RegisterObject(PacmanGhostController);
-
-        PacmanGhost* myGhost = nullptr;
-        this->actuelposition = myGhost.getPosition();
-
-        bool ismoving = false;
-        this->target_x = actuelposition.x;
-        this->target_z = actuelposition.z;     
-    }
-
-    void PacmanGhostController::setGhost(PacmanGhost ghost){
-        this->myGhost = ghost;
-    }
-
-    /**
-    @brief
-        Destructor.
-    */
-    PacmanGhostController::~PacmanGhostController()
-    {
-
-    }
-
-
-    static Vector3[] possibleposition = [new Vector3(0,10,245), new Vector3(215,0,240)];
-    /**
-    @brief
-        The controlling happens here. This method defines what the controller has to do each tick.
-    @param dt
-        The duration of the tick.
-    */
-    void PacmanGhostController::tick(float dt)
-    {
-        /* NOTE: Ugly hack by Sandro to make the tutorial work for the moment.
-         * This will be reverted once the framework update is complete
-         */
-        //AutonomousDrone *myDrone = static_cast<AutonomousDrone*>(this->getControllableEntity());
-        ObjectList<PacmanGhost> objectList;
-        ObjectList<PacmanGhost>::iterator it = objectList.begin();
-        PacmanGhost* myDrone = *it;
-
-        if (this->myGhost != nullptr)
-        {
-
-            this->actuelposition = this->myGhost.getPosition();
-
-        if(((this->actuelposition.x - this->target_x)<0.1) && ((this->actuelposition.z - this->target_z)<0.1)){
-            this->ismoving = false;
-        }
-
-        if(this->ismoving){
-            if(!((this->actuelposition.z-target_z)<0.1))
-                moveFrontBack(sgn(this->actuelposition.z-this->target_z)*dt*100);
-            if(!((this->actuelposition.x-target_x)<0.1))
-              moveRightLeft(sgn(this->actuelposition.x-this->target_x)*dt*100); //Assume dt is quite small
-        }
-        
-        else{ //Check on which position ghost is
-            if(((this->actuelposition.x - possibleposition[0].x)<0.1) && ((this->actuelposition.z - possibleposition[1].z)<0.1)){
-                this->target_x = possibleposition[1].x;
-                this->target_z = possibleposition[1].z; 
-                this->ismoving = true;
-            }
-            else if(((actuelposition.x - possibleposition[0].x)<0.1) && ((actuelposition.z - possibleposition[1].z)<0.1)){
-                this->target_x = 0
-                this->target_z =  
-                this->ismoving = true;
-            }
-            else{
-            }      
-            } //End of Position table
-
-        }
-    }
-
-}
Index: code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhostController.h
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/PacmanGhostController.h	(revision 11850)
+++ 	(revision )
@@ -1,54 +1,0 @@
-/*
- *   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:
- *      Oli Scheuss
- *   Co-authors:
- *      Damian 'Mozork' Frick
- *
- */
-
-#ifndef _PacmanGhostController_H__
-#define _PacmanGhostController_H__
-
-#include "OrxonoxPrereqs.h"
-
-#include "Controller.h"
-#include "tools/interfaces/Tickable.h"
-
-namespace orxonox
-{
-
-    class _OrxonoxExport PacmanGhostController : public Controller, public Tickable
-    {
-        public:
-            PacmanGhostController(Context* context);
-            virtual ~PacmanGhostController();
-
-            virtual void tick(float dt); 
-
-        protected:
-
-        private:
-    };
-}
-
-#endif 
Index: code/branches/3DPacman_FS18/src/modules/Pacman/PacmanPointSphere.cc
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/PacmanPointSphere.cc	(revision 11850)
+++ code/branches/3DPacman_FS18/src/modules/Pacman/PacmanPointSphere.cc	(revision 11859)
@@ -27,5 +27,5 @@
  */
 
-#include "PacmanGhost.h"
+#include "PacmanPointSphere.h"
 
 #include "core/CoreIncludes.h"
@@ -34,5 +34,5 @@
 namespace orxonox
 {
-    RegisterClass(PacmanGhost);
+    RegisterClass(PacmanPointSphere);
 
     /**
@@ -42,17 +42,8 @@
         The creator of this object.
     */
-    PacmanGhost::PacmanGhost(Context* context) : ControllableEntity(context)
+    PacmanPointSphere::PacmanPointSphere(Context* context) : ControllableEntity(context)
     {
-        RegisterObject(PacmanGhost);
-
-        this->myController_ = NULL;
-
-        this->localLinearAcceleration_.setValue(0, 0, 0);
-        this->localAngularAcceleration_.setValue(0, 0, 0);
-        this->primaryThrust_  = 100;
-        this->auxiliaryThrust_ = 100;
-        this->rotationThrust_ = 10;
-
-        this->setCollisionType(CollisionType::Dynamic);
+        RegisterObject(PacmanPointSphere);
+        this->setCollisionType(CollisionType::none); 
     }
 
@@ -61,9 +52,7 @@
         Destructor. Destroys controller, if present.
     */
-    PacmanGhost::~PacmanGhost()
+    PacmanPointSphere::~PacmanPointSphere()
     {
         // Deletes the controller if the object was initialized and the pointer to the controller is not NULL.
-        if( this->isInitialized() && this->myController_ != NULL )
-            delete this->myController_;
     }
 
@@ -72,106 +61,30 @@
         Method for creating a AutonomousDrone through XML.
     */
-    void PacmanGhost::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    void PacmanPointSphere::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
-        // This calls the XMLPort function of the parent class
-        SUPER(PacmanGhost, XMLPort, xmlelement, mode);
+        SUPER(PacmanPointSphere, XMLPort, xmlelement, mode);
 
-        XMLPortParam(PacmanGhost, "primaryThrust", setPrimaryThrust, getPrimaryThrust, xmlelement, mode);
-        // Make sure you add the variables auxiliaryThrust_ and rotationThrust_ to XMLPort.
-        // Variables can be added by the following command
-        // XMLPortParam(Classname, "xml-attribute-name (i.e. variablename)", setFunctionName, getFunctionName, xmlelement, mode);
-        // Also make sure that you also create the get- and set-functions in AutonomousDrone.h. As you can see, the get- and set-functions for the variable primaryThrust_ has already been specified there, so you can get your inspiration from there.
+        XMLPortParam(PacmanPointSphere, "resetposition", setResetPosition, getResetPosition, xmlelement, mode);
     }
 
-    /**
-    @brief
-        Defines which actions the AutonomousDrone has to take in each tick.
-    @param dt
-        The length of the tick.
-    */
-    void PacmanGhost::tick(float dt)
+
+    void PacmanPointSphere::tick(float dt)
     {
         SUPER(PacmanGhost, tick, dt);
-
-        this->localLinearAcceleration_.setX(this->localLinearAcceleration_.x() * getMass() * this->auxiliaryThrust_);
-        this->localLinearAcceleration_.setY(this->localLinearAcceleration_.y() * getMass() * this->auxiliaryThrust_);
-        if (this->localLinearAcceleration_.z() > 0)
-            this->localLinearAcceleration_.setZ(this->localLinearAcceleration_.z() * getMass() * this->auxiliaryThrust_);
-        else
-            this->localLinearAcceleration_.setZ(this->localLinearAcceleration_.z() * getMass() * this->primaryThrust_);
-        this->physicalBody_->applyCentralForce(physicalBody_->getWorldTransform().getBasis() * this->localLinearAcceleration_);
-        this->localLinearAcceleration_.setValue(0, 0, 0);
-
-        this->localAngularAcceleration_ *= this->getLocalInertia() * this->rotationThrust_;
-        this->physicalBody_->applyTorque(physicalBody_->getWorldTransform().getBasis() * this->localAngularAcceleration_);
-        this->localAngularAcceleration_.setValue(0, 0, 0);
-
     }
 
-    /**
-    @brief
-        Moves the AutonomousDrone in the negative z-direction (Front/Back) by an amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the movement.
-    */
-    void PacmanGhost::moveFrontBack(const Vector2& value)
+    bool PacmanPointSphere::taken(Vector3 playerpos)
     {
-        this->localLinearAcceleration_.setZ(this->localLinearAcceleration_.z() - value.x);
+      if((abs(this->resetposition.x - playerpos.x)<0.1) && (abs(this->resetposition.z - playerpos.z)<0.1)){
+        this->setPosition(Vector3(resetposition.x, -50, resetposition.z));
+        return true;
+      } 
+
+      return false;
     }
 
-    /**
-    @brief
-        Moves the AutonomousDrone in the x-direction (Right/Left) by an amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the movement.
-    */
-    void PacmanGhost::moveRightLeft(const Vector2& value)
-    {
-        this->localLinearAcceleration_.setX(this->localLinearAcceleration_.x() + value.x);
+
+    void PacmanPointSphere::resetPacmanPointSphere(){
+        this->setPosition(resetposition);
     }
-
-    /**
-    @brief
-        Moves the AutonomousDrone in the y-direction (Up/Down) by an amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the movement.
-    */
-    void PacmanGhost::moveUpDown(const Vector2& value)
-    {
-        this->localLinearAcceleration_.setY(this->localLinearAcceleration_.y() + value.x);
-    }
-
-    /**
-    @brief
-        Rotates the AutonomousDrone around the y-axis by the amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the angular movement.
-    */
-    void PacmanGhost::rotateYaw(const Vector2& value)
-    {
-        this->localAngularAcceleration_.setY(this->localAngularAcceleration_.y() - value.x);
-    }
-
-    /**
-    @brief
-        Rotates the AutonomousDrone around the x-axis by the amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the angular movement.
-    */
-    void PacmanGhost::rotatePitch(const Vector2& value)
-    {
-        this->localAngularAcceleration_.setX(this->localAngularAcceleration_.x() + value.x);
-    }
-
-    /**
-    @brief
-        Rotates the AutonomousDrone around the z-axis by the amount specified by the first component of the input 2-dim vector.
-    @param value
-        The vector determining the amount of the angular movement.
-    */
-    void PacmanGhost::rotateRoll(const Vector2& value)
-    {
-        this->localAngularAcceleration_.setZ(this->localAngularAcceleration_.z() + value.x);
-    }
-
 }
Index: code/branches/3DPacman_FS18/src/modules/Pacman/PacmanPointSphere.h
===================================================================
--- code/branches/3DPacman_FS18/src/modules/Pacman/PacmanPointSphere.h	(revision 11850)
+++ code/branches/3DPacman_FS18/src/modules/Pacman/PacmanPointSphere.h	(revision 11859)
@@ -27,97 +27,36 @@
  */
 
-#ifndef _PacmanGhost_H__
-#define _PacmanGhost_H__
+#ifndef _PacmanPointSphere_H__
+#define _PacmanPointSphere_H__
 
 #include "OrxonoxPrereqs.h"
 
 #include "core/XMLPort.h"
-#include "controllers/PacmanGhostController.h"
 
-#include "ControllableEntity.h"
+#include "worldentities/ControllableEntity.h"
 
 namespace orxonox {
 
-    class _OrxonoxExport PacmanGhost : public ControllableEntity
+    class _OrxonoxExport PacmanPointSphere : public ControllableEntity
     {
         public:
-            PacmanGhost(Context* context);
-            virtual ~PacmanGhost();
+            PacmanPointSphere(Context* context);
+            virtual ~PacmanPointSphere();
 
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating an AutonomousDrone through XML.
             virtual void tick(float dt); //!< Defines which actions the AutonomousDrone has to take in each tick.
 
-            virtual void moveFrontBack(const Vector2& value);
-            virtual void moveRightLeft(const Vector2& value);
-            virtual void moveUpDown(const Vector2& value);
+            bool taken(Vector3 playerpos);
+            void resetPacmanPointSphere();
 
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
-
-            /**
-            @brief Moves the Drone in the Front/Back-direction by the specifed amount.
-            @param value  The amount by which the drone is to be moved.
-            */
-            inline void moveFrontBack(float value)
-            { this->moveFrontBack(Vector2(value, 0)); }
-            /**
-            @brief Moves the Drone in the Right/Left-direction by the specifed amount.
-            @param value  The amount by which the drone is to be moved.
-            */
-            inline void moveRightLeft(float value)
-            { this->moveRightLeft(Vector2(value, 0)); }
-            /**
-            @brief Moves the Drone in the Up/Down-direction by the specifed amount.
-            @param value  The amount by which the drone is to be moved.
-            */
-            inline void moveUpDown(float value)
-            { this->moveUpDown(Vector2(value, 0)); }
-
-            /**
-            @brief Rotates the Drone around the y-axis by the specifed amount.
-            @param value  The amount by which the drone is to be rotated.
-            */
-            inline void rotateYaw(float value)
-            { this->rotateYaw(Vector2(value, 0)); }
-            /**
-            @brief Rotates the Drone around the x-axis by the specifed amount.
-            @param value  The amount by which the drone is to be rotated.
-            */
-            inline void rotatePitch(float value)
-            { this->rotatePitch(Vector2(value, 0)); }
-            /**
-            @brief Rotates the Drone around the z-axis by the specifed amount.
-            @param value  The amount by which the drone is to be rotated.
-            */
-            inline void rotateRoll(float value)
-            { this->rotateRoll(Vector2(value, 0)); }
-
-            /**
-            @brief Sets the primary thrust to the input amount.
-            @param thrust The amount of thrust.
-            */
-            inline void setPrimaryThrust( float thrust )
-                { this->primaryThrust_ = thrust; }
-            //TODO: Place your set-functions here.
-            // Hint: auxiliary thrust, rotation thrust.
+            inline void setResetPosition(Vector3 rpos)
+                { this->resetposition = rpos; }    
             
-            /**
-            @brief Gets the primary thrust to the input amount.
-            @return The amount of thrust.
-            */
-            inline float getPrimaryThrust()
-                { return this->primaryThrust_; }
-            //TODO: Place your get-functions here.
+            inline Vector3 getResetPosition()
+               { return this->resetposition; }        
 
         private:
-            PacmanGhostController *myController_; //!< The controller of the AutonomousDrone.
-
-            btVector3 localLinearAcceleration_; //!< The linear acceleration that is used to move the AutonomousDrone the next tick.
-            btVector3 localAngularAcceleration_; //!< The linear angular acceleration that is used to move the AutonomousDrone the next tick.
-            float primaryThrust_; //!< The amount of primary thrust. This is just used, when moving forward.
-            float auxiliaryThrust_; //!< The amount of auxiliary thrust. Used for all other movements (except for rotations).
-            float rotationThrust_; //!< The amount of rotation thrust. Used for rotations only.s
-        
+            
+            Vector3 resetposition;
     };
 
