00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "GameManager.h"
00021 #include "../game/InitState.h"
00022
00023
00024
00025
00026 GameManager::GameManager()
00027 : pDevice(0), mLastTime(0)
00028 {
00029 }
00030
00031
00032 GameManager::~GameManager()
00033 {
00034 clear();
00035 }
00036
00037
00038 GameManager* GameManager::pInstance = 0;
00039
00040 GameManager* GameManager::Instance()
00041 {
00042 if(pInstance == 0)
00043 pInstance = new GameManager();
00044
00045 return pInstance;
00046 }
00047
00048 GameManager& GameManager::Reference()
00049 {
00050 if(pInstance == 0)
00051 pInstance = new GameManager();
00052
00053 return *pInstance;
00054 }
00055
00056
00057 void GameManager::init()
00058 {
00059
00060 pDataStore = new DataStore();
00061 pEventManager = new EventManager();
00062
00063
00064 pDevice = createDevice(EDT_OPENGL, dimension2d<u32>(1024, 768), 32, false, false, false, pEventManager);
00065
00066
00067 pDriver = pDevice->getVideoDriver();
00068 pSceneManager = pDevice->getSceneManager();
00069 pGUIEnvironment = pDevice->getGUIEnvironment();
00070
00071
00072 pAssetManager = new AssetManager();
00073 pAssetManager->init();
00074
00075 pEntityManager = new EntityManager();
00076
00077 #ifdef __COMPILE_WITH_SFML_AUDIO__
00078 pSoundManager = new SoundManager();
00079 #endif // __COMPILE_WITH_SFML_AUDIO__
00080
00081 #ifdef __COMPILE_WITH_ANGELSCRIPT__
00082 pScriptManager = new ScriptManager();
00083 pScriptManager->init();
00084 #endif // __COMPILE_WITH_ANGELSCRIPT__
00085
00086
00087 GameState *state = new InitState();
00088 changeState(state);
00089 state->drop();
00090 }
00091
00092
00093 void GameManager::update()
00094 {
00095
00096 u32 time = pDevice->getTimer()->getTime();
00097 f32 deltaTime = ( (float)time - (float)mLastTime ) *0.01f;
00098 mLastTime = time;
00099
00100 if(!mGameStates.empty() && deltaTime > 0.0f)
00101 {
00102 mGameStates.back()->onUpdate(deltaTime);
00103 mGameStates.back()->update(deltaTime);
00104 }
00105
00106
00107 if(pDevice->isWindowActive())
00108 {
00109 if(!mGameStates.empty())
00110 {
00111 pDriver->beginScene();
00112
00113 mGameStates.back()->render();
00114 mGameStates.back()->onRender();
00115
00116 pSceneManager->drawAll();
00117 pGUIEnvironment->drawAll();
00118
00119 pDriver->endScene();
00120 }
00121 }
00122 }
00123
00124
00125 void GameManager::clear()
00126 {
00127
00128 while(!mGameStates.empty())
00129 {
00130 mGameStates.back()->clear();
00131 mGameStates.back()->drop();
00132 mGameStates.pop_back();
00133 }
00134
00135
00136 #ifdef ____COMPILE_WITH_ANGELSCRIPT__
00137 pScriptManager->clear();
00138 delete pScriptManager;
00139 #endif // __COMPILE_WITH_ANGELSCRIPT__
00140
00141 #ifdef __COMPILE_WITH_SFML_AUDIO__
00142 delete pSoundManager;
00143 #endif // __COMPILE_WITH_SFML_AUDIO__
00144
00145 delete pEntityManager;
00146
00147 pAssetManager->clear();
00148 delete pAssetManager;
00149
00150 delete pEventManager;
00151 delete pDataStore;
00152
00153
00154 pDevice->drop();
00155 }
00156
00157
00158 void GameManager::grab()
00159 {
00160
00161 }
00162
00163
00164 void GameManager::drop()
00165 {
00166
00167 }
00168
00169
00170 void GameManager::changeState(GameState *state)
00171 {
00172
00173 popState();
00174
00175
00176 if(state != NULL)
00177 {
00178 mGameStates.push_back(state);
00179 state->grab();
00180 state->init();
00181 }
00182 }
00183
00184
00185 void GameManager::pushState(GameState *state)
00186 {
00187
00188 if(!mGameStates.empty())
00189 mGameStates.back()->onPause();
00190
00191
00192 if(state != NULL)
00193 {
00194 mGameStates.push_back(state);
00195 state->grab();
00196 state->init();
00197 }
00198 }
00199
00200
00201 void GameManager::popState()
00202 {
00203
00204 if(!mGameStates.empty())
00205 {
00206 mGameStates.back()->clear();
00207 mGameStates.back()->drop();
00208 mGameStates.pop_back();
00209 }
00210
00211
00212 if(!mGameStates.empty())
00213 mGameStates.back()->onUnPause();
00214 }
00215
00216
00217 IrrlichtDevice* GameManager::getDevice()
00218 {
00219 return pDevice;
00220 }
00221
00222
00223 IVideoDriver* GameManager::getDriver()
00224 {
00225 return pDriver;
00226 }
00227
00228
00229 ISceneManager* GameManager::getSceneManager()
00230 {
00231 return pSceneManager;
00232 }
00233
00234
00235 IGUIEnvironment* GameManager::getGUIEnvironment()
00236 {
00237 return pGUIEnvironment;
00238 }
00239
00240
00241 AssetManager* GameManager::getAssetManager()
00242 {
00243 return pAssetManager;
00244 }
00245
00246
00247 DataStore* GameManager::getDataStore()
00248 {
00249 return pDataStore;
00250 }
00251
00252
00253 EntityManager* GameManager::getEntityManager()
00254 {
00255 return pEntityManager;
00256 }
00257
00258
00259 EventManager* GameManager::getEventManager()
00260 {
00261 return pEventManager;
00262 }
00263
00264 #ifdef __COMPILE_WITH_ANGELSCRIPT__
00265
00266
00267 ScriptManager* GameManager::getScriptManager()
00268 {
00269 return pScriptManager;
00270 }
00271
00272 #endif // __COMPILE_WITH_ANGELSCRIPT__
00273
00274 #ifdef __COMPILE_WITH_SFML_AUDIO__
00275
00276
00277 SoundManager* GameManager::getSoundManager()
00278 {
00279 return pSoundManager;
00280 }
00281
00282 #endif // __COMPILE_WITH_SFML_AUDIO__
00283
00284
00285 bool GameManager::getIsRunning() const
00286 {
00287 return pDevice->run();
00288 }
00289
00290
00291
00292 void GameManager::setIsRunning(bool value)
00293 {
00294 if(value == false)
00295 pDevice->closeDevice();
00296 }
00297
00298