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 }
1.4.5