#include "stdafx.h" #include "SGameSceneManager.h" #include "SGameScene.h" #include "TemplateUtil.h" #include #include #include "KViewport.h" void rp::SGameSceneManager::tick( DWORD time ) { mTimer.setTime( time ); if( !mGarbages.empty() ) { scene_vector_t::iterator eoGarbage = mGarbages.end(); for( scene_vector_t::iterator it = mGarbages.begin(); it != eoGarbage; ++it ) _removeScene( **it ); mGarbages.clear(); } scene_vector_t::iterator it = mScenes.begin(), end = mScenes.end(); for( ; it != end; ++it ) { SGameSceneIPtr Scene = *it; if( Scene->isActivated() ) Scene->onTick(); } } void rp::SGameSceneManager::render( KViewportObject* viewport ) { scene_vector_t::iterator it = mScenes.begin(), end = mScenes.end(); for( ; it != end; ++it ) { SGameSceneIPtr Scene = *it; if( Scene->isActivated() && Scene->isVisible() ) Scene->onRender( viewport ); } } void rp::SGameSceneManager::addScene( SGameScene& scene ) { //_ASSERTE( _CrtCheckMemory( ) ); scene.onEnter(); mScenes.push_back( &scene ); } // 2010.07.06 - prodongi void rp::SGameSceneManager::addScene(SGameScene& scene, SGameScene const* _where) { scene_vector_t::iterator it = mScenes.begin(); for (; it != mScenes.end(); ++it) { if (*it == _where) { scene.onEnter(); mScenes.insert(it, &scene); return ; } } addScene(scene); } void rp::SGameSceneManager::removeScene( SGameScene& scene ) { mGarbages.push_back( &scene ); } void rp::SGameSceneManager::removeScene2( SGameScene& scene ) { _removeScene( scene ); } void rp::SGameSceneManager::_removeScene( SGameScene& scene ) { scene_vector_t::iterator it = mScenes.begin(), end = mScenes.end(); for( ; it != end; ++it ) { if( (*it) == &scene ) { scene.onLeave(); (*it) = mScenes.back(); mScenes.pop_back(); break; } } }