game.cpp

Go to the documentation of this file.
00001 /* MAINTAINER: Bernard CURRENT_EDITOR: Bernard */ 
00002 
00003 #include "log.h"
00004 #include "game.h"
00005 
00006 using namespace std;
00007 
00008 Game::Game(void): 
00009 mEndFun(false)
00010 {
00011         mRunning = false;
00012         mWorld = 0;
00013 /*
00014         Player p1;
00015         
00016         p1.setName("Petko");
00017         newPlayer(p1);
00018         
00019         p1.setName("Mungo");
00020         newPlayer(p1);
00021 */      
00022 }
00023 
00024 Game::~Game(void)
00025 {
00026 
00027 }
00028 
00029 void Game::clean()
00030 {
00031         
00032         // Remove all players
00033         for (int i = 0; (i < (int)mPlayers.size()); ++i)
00034         {
00035                 if (mPlayers[i] != 0) delete mPlayers[i];
00036                 mPlayers[i] = 0;
00037         }
00038         updateValidPlayersID();
00039 
00040 }
00041 
00042 World& Game::getWorld()
00043 {
00044         assertL(mWorld);
00045         
00046         return *mWorld;
00047 }
00048 
00049 void Game::endFun()
00050 { 
00051         TIN;
00052 
00053         mEndFun = true; 
00054 }
00055 
00056 bool Game::loadMap(const std::string mapName)
00057 {
00058         TIN;
00059         
00060         LOGE << "Not implemented :-)" << endl;
00061 
00062         return true;
00063 }
00064 
00065 
00066 int Game::newPlayer(const Player &player, int ID/* = -1*/)
00067 {
00068         // search for new ID
00069         if (ID == -1)
00070         {
00071                 for (ID = 0; (ID < (int)mPlayers.size()) && (mPlayers[ID] != 0); ++ID);
00072         }
00073 
00074         // resize the array for sure
00075         if (ID >= (int)mPlayers.size()) 
00076         {
00077                 // resize and init to zero
00078                 int oldsz = (int)mPlayers.size();
00079                 mPlayers.resize(ID+1);
00080                 for (int i = oldsz; i < ID+1; ++i) mPlayers[ID] = 0;
00081         }
00082         
00083         if (mPlayers[ID] != 0)
00084         {
00085                 LOGE << "Something is wrong. Wanted to add allready existing ID." << endl;
00086                 DIE();
00087         }
00088                 
00089         mPlayers[ID] = new Player();
00090         if (mPlayers[ID] == 0)
00091         {
00092                 LOGE << "new failed. And this will probably fail too :0)" << endl;
00093                 DIE();
00094         }
00095         
00096         *mPlayers[ID] = player;
00097         mPlayers[ID]->setID(ID);
00098 
00099         updateValidPlayersID();
00100 
00101         return ID;
00102 }
00103 
00104 
00105 Player & Game::getPlayer(int ID)
00106 {
00107         if (ID < 0 || ID >= (int)mPlayers.size() || mPlayers[ID] == 0)
00108         {
00109                 LOGE << "Invalid player ID " << ID << endl;
00110                 DIE();
00111         }
00112 
00113         return *mPlayers[ID];
00114 }
00115 
00116 
00117 void Game::removePlayer(int ID)
00118 {
00119         if (ID < 0 || ID >= (int)mPlayers.size() || mPlayers[ID] == 0)
00120         {
00121                 LOGE << "Invalid player ID " << ID << endl;
00122                 DIE();
00123         }
00124 
00125         delete mPlayers[ID];
00126         mPlayers[ID] = 0;
00127 
00128         updateValidPlayersID();
00129 }
00130 
00131 
00132 std::vector<int>& Game::getValidPlayersID()
00133 {
00134         return mValidPlayersID; 
00135 }
00136         
00137 void Game::updateValidPlayersID()
00138 {
00139         mValidPlayersID.clear();
00140         
00141         for (int i = 0; i < (int)mPlayers.size(); ++i)
00142         {
00143                 if (mPlayers[i] != 0)
00144                 {
00145                         mValidPlayersID.push_back(mPlayers[i]->getID());
00146                 }
00147         }
00148 }
00149 
00150 bool Game::isPlayerIDValid(int ID)
00151 {
00152         if (ID < 0 || ID >= (int)mPlayers.size() || mPlayers[ID] == 0) return false;
00153         return true;
00154 }
00155         
00156 
00157 bool Game::isRunning()
00158 {
00159         mRunningMutex.lock();
00160         bool rv = mRunning;
00161         mRunningMutex.unlock();
00162 
00163         return rv;
00164 }
00165 
00166 
00167 void Game::setRunning(bool state)
00168 {
00169         mRunningMutex.lock();
00170         mRunning = state;
00171         mRunningMutex.unlock();
00172 }
00173 
00174 void Game::recreateWorld()
00175 {
00176         if (mWorld != 0) delete mWorld; 
00177                 
00178         mWorld = new World();
00179 
00180         if (mWorld == 0) DIE("Creating new world failed!");
00181 }
00182 
00183 
00184 TaskManager& Game::getTaskManager()
00185 {
00186         return mTaskManager;
00187 }

Generated on Wed Apr 12 13:55:28 2006 for bjs by  doxygen 1.4.5