40 _bInitialized = _bFinalized = _bSwitchRequest = M_FALSE;
41 _nActiveStage = _nSwitchStage = 0;
46 std::vector<laStage*>::iterator iter;
48 for (iter = _vStages.begin(); iter != _vStages.end(); iter++)
54 void laGame::addStage(
laStage* pStage)
56 ASSERT(!_bFinalized,
"The game object is terminated.");
58 _vStages.push_back(pStage);
59 pStage->_pGame =
this;
60 pStage->bInitialized = M_FALSE;
70 void laGame::setStage(
unsigned n)
72 MLOG(
"Request for stage change (%d -> %d)", _nActiveStage, n);
73 ASSERT(n < _vStages.size(),
"Unimplemented stage requested in laGame::setStage(%d)", n);
74 if(n==_nActiveStage)
return;
78 _bSwitchRequest = M_TRUE;
81 else _nActiveStage = n;
84 void laGame::_switch_actions()
86 _bSwitchRequest = M_FALSE;
87 unsigned nTarget = _nSwitchStage;
91 if( _vStages[_nActiveStage]->bInitialized ) _vStages[_nActiveStage]->onDeactivate();
93 if( !(_vStages[nTarget]->bInitialized) )
95 _vStages[nTarget]->onInit();
96 _vStages[nTarget]->bInitialized = M_TRUE;
99 _vStages[nTarget]->onActivate();
103 MLOG(
"Active stage changed %d -> %d", _nActiveStage, nTarget);
104 _nActiveStage = nTarget;
107 void laGame::setStage(
char* strName)
122 throw laError(
"laGame::setStage('%s'): Not implemented", strName);
126 laStage* laGame::getStage(
unsigned n)
128 ASSERT(n<_vStages.size(),
"Unimplemented stage requested in laGame::getStage(%d)", n);
133 laStage* laGame::getStage(
char* strName)
145 throw laError(
"laGame::getStage('%s'): Not implemented", strName);
149 void laGame::onInit()
151 ASSERT(!_bInitialized,
"Already initialized");
152 _bInitialized = M_TRUE;
156 if( !(_vStages[_nActiveStage]->bInitialized) )
158 _vStages[_nActiveStage]->onInit();
159 _vStages[_nActiveStage]->bInitialized = M_TRUE;
160 _vStages[_nActiveStage]->onActivate();
164 void laGame::onFini()
166 ASSERT(!_bFinalized,
"Already discarded");
167 _bFinalized = M_TRUE;
169 std::vector<laStage*>::iterator iter;
173 for (iter = _vStages.begin(); iter != _vStages.end(); iter++)
174 if(_vStages[_nActiveStage]->bInitialized) {
176 (*iter)->bInitialized = M_FALSE;
182 ASSERT(_nActiveStage < _vStages.size(),
"Unimplemented stage requested (%d)", _nActiveStage);
184 while(_bSwitchRequest) _switch_actions();
185 _vStages[_nActiveStage]->onFrame(pr, pi, pt);
Virtual interface for the Engine graphics renderer.