Index: code/trunk/src/modules/gametypes/SpaceRace.cc
===================================================================
--- code/trunk/src/modules/gametypes/SpaceRace.cc	(revision 11071)
+++ code/trunk/src/modules/gametypes/SpaceRace.cc	(revision 11358)
@@ -23,10 +23,42 @@
  *     Mauro Salomon
  *   Co-authors:
- *      Celine Egger
- *
- */
+ *      Celine Egger*/
+        
+
+
+
+/*
+Edited, Renewed and Revised by 
+        Berkay Berabi
+        Louis Meile
+ 
+ 
+To-do- list by Louis Meile and Berkay Berabi for future projects :
+- improve AI (SpaceRaceController): 
+i) so far bots arent able to evade obstacles. fix that!
+ii) bots should be able to use pickups
+- game crashes when bot wins the game(this is a huge problem you should work with the log file to find out what the errors are )
+- bots rotate while waiting for the countdown to end. make it stop!
+- add elements to level file to make it even more fun to play. be creative!
+*/
+
 
 #include "SpaceRace.h"
 
+#include "core/CoreIncludes.h"
+#include "chat/ChatManager.h"
+#include "util/Convert.h"
+#include "util/Math.h"
+#include "infos/Bot.h"
+#include "items/Engine.h"
+#include "controllers/HumanController.h"
+
+#include "core/CoreIncludes.h"
+#include "chat/ChatManager.h"
+#include "infos/PlayerInfo.h"
+#include "worldentities/pawns/Pawn.h"
+#include "core/config/ConfigValueIncludes.h"
+#include "infos/Bot.h"
+#include "SpaceRaceBot.h"
 #include "items/Engine.h"
 
@@ -37,4 +69,6 @@
 #include "SpaceRaceBot.h"
 #include "items/Engine.h"
+#include <vector>
+
 
 namespace orxonox
@@ -46,10 +80,87 @@
         RegisterObject(SpaceRace);
 
-        this->botclass_ = Class(SpaceRaceBot);//ClassByString("")
+        this->botclass_ = Class(SpaceRaceBot); //ClassByString("")
         this->cantMove_ = false;
         this->bTimeIsUp_ = false;
-        this->numberOfBots_ = 0; // quick fix: don't allow default-bots to enter the race
-                                 // remove this line, if a raceBot has been created.
-    }
+        this->setConfigValues();
+
+        this->numberOfBots_ = 5; // quick fix: don't allow default-bots to enter the race 
+        //we fixed the number of bots in order to have the same starting position all the time ! 
+    }
+
+  void SpaceRace::setConfigValues()
+    {
+       
+    
+    }
+
+    void SpaceRace::start()
+    {
+    // define spawn positions of the 5 bots
+
+        int startpos[15];
+        
+        startpos[0] =100;
+        startpos[1] =-40;
+        startpos[2] =0;
+        
+        startpos[3] =100;
+        startpos[4] =-40;
+        startpos[5] =100;
+        
+        startpos[6] =100;
+        startpos[7] =-40;
+        startpos[8] =-100;
+        
+        startpos[9] =0;
+        startpos[10] =-40;
+        startpos[11] =-80;
+        
+        startpos[12] =0;
+        startpos[13] =-40;
+        startpos[14] =80;
+        
+
+
+
+        Gametype::start();
+   if (true)
+        {
+            this->spawnPlayersIfRequested();
+            this->cantMove_ = true;
+            //players are unable to move while countdown is running
+            for (Engine* engine : ObjectList<Engine>()){
+                engine->setActive(false);
+                
+
+            }
+           //append spawn positions to bots
+           int a,b,c;
+            a=0;
+            b=1;
+            c=2;
+              for (SpaceRaceBot* bot : ObjectList<SpaceRaceBot>()){
+                bot->getControllableEntity()->setPosition(startpos[a],startpos[b],startpos[c]);
+               a= a+3;
+               b = b+3; 
+               c+= 3;
+            }
+
+
+        }
+
+                                                
+
+        std::string message("Use headphones to hear the countdown!");
+        this->getGametypeInfo()->sendAnnounceMessage(message);
+        ChatManager::message(message);
+
+//after 11 seconds , countdownFinished function is called to activate bots` engines
+Timer* countdownTimer = new Timer();
+        countdownTimer->setTimer(11, false, createExecutor(createFunctor(&SpaceRace::countdownFinished, this)));
+    }
+
+
+
 
     void SpaceRace::end()
@@ -63,9 +174,9 @@
         {
             message = multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds !!\n"
-                        + "You didn't reach the check point  before the time limit. You lose!";
+                        + "You lose!";
         }
         else
         {
-            message = "You win!! You have reached the last check point after "+ multi_cast<std::string>(s)
+            message = "You win!! Final check point reached after "+ multi_cast<std::string>(s)
                         + "." + multi_cast<std::string>(ms) + " seconds.";
         }
@@ -78,31 +189,9 @@
     }
 
-    void SpaceRace::tick(float dt)
+
+void SpaceRace::tick(float dt)
     {
         SUPER(SpaceRace,tick,dt);
-
-        // spawn the players already when the countdown starts, but deactivate their engines
-        if (this->isStartCountdownRunning() && !this->cantMove_)
-        {
-            this->spawnPlayersIfRequested();
-            this->cantMove_ = true;
-
-            for (Engine* engine : ObjectList<Engine>())
-                engine->setActive(false);
-        }
-
-        // activate the engines again if the countdown ends
-        if (!this->isStartCountdownRunning() && this->cantMove_)
-        {
-            for (Engine* engine : ObjectList<Engine>())
-                engine->setActive(true);
-
-            this->cantMove_= false;
-
-            std::string message = "The match has started! Reach the check points as quickly as possible!";
-            this->getGametypeInfo()->sendAnnounceMessage(message);
-            ChatManager::message(message);
-        }
-    }
+}
 
     void SpaceRace::newCheckpointReached(RaceCheckPoint* checkpoint, PlayerInfo* player)
@@ -114,23 +203,60 @@
         int ms = this->clock_.getMilliseconds() % 1000;
 
-        const std::string& message = "Checkpoint " + multi_cast<std::string>(checkpoint->getCheckpointIndex() + 1)
-            + " reached after " + multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds.";
+       
+    
+        const std::string& message = player->getName() + " reached the checkpoint " + multi_cast<std::string>(checkpoint->getCheckpointIndex() + 1) 
+        + "after " + multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds.";
+ this->getGametypeInfo()->sendAnnounceMessage(message);
+        ChatManager::message(message);
+
+    }
+
+ void SpaceRace::countdownFinished()//activates the engines of all players 
+    {
+
+        std::string message("RACE STARTED ");
         this->getGametypeInfo()->sendAnnounceMessage(message);
         ChatManager::message(message);
-    }
-
+
+
+    for (Engine* engine : ObjectList<Engine>())
+                engine->setActive(true);
+
+
+    
+}
+
+ void SpaceRace::playerEntered(PlayerInfo* player)
+    {
+        Gametype::playerEntered(player);
+
+        const std::string& message = player->getName() + " entered the game";
+        ChatManager::message(message);
+    }
+
+
+ void SpaceRace::addBots(unsigned int amount) //function that add the bots to the game 
+    {
+        for (unsigned int i = 1; i <= amount; ++i){
+            this->botclass_.fabricate(this->getContext());
+        }
+    }
+
+
+//set bot configurations
     bool SpaceRace::allowPawnHit(Pawn* victim, Pawn* originator)
     {
+        return true;
+    }
+
+    bool SpaceRace::allowPawnDamage(Pawn* victim, Pawn* originator)
+    {
+        return true;
+    }
+
+    bool SpaceRace::allowPawnDeath(Pawn* victim, Pawn* originator)// false because the bots can not recognize the objects and die to early 
+                                                                    //if they can 
+    {
         return false;
     }
-
-    bool SpaceRace::allowPawnDamage(Pawn* victim, Pawn* originator)
-    {
-        return false;
-    }
-
-    bool SpaceRace::allowPawnDeath(Pawn* victim, Pawn* originator)
-    {
-        return false;
-    }
 }
