Files
2026-06-01 12:46:52 +02:00

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