84 lines
1.8 KiB
C++
84 lines
1.8 KiB
C++
#include "stdafx.h"
|
|
#include "SGameSceneManager.h"
|
|
#include "SGameScene.h"
|
|
#include "TemplateUtil.h"
|
|
#include <functional>
|
|
#include <algorithm>
|
|
#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;
|
|
}
|
|
}
|
|
} |