diff --git a/include/eepp/scene/scenemanager.hpp b/include/eepp/scene/scenemanager.hpp index 92495f4cc..e6839f930 100644 --- a/include/eepp/scene/scenemanager.hpp +++ b/include/eepp/scene/scenemanager.hpp @@ -16,13 +16,19 @@ namespace EE { namespace Scene { class SceneNode; -class EE_API SceneManager : public Container { +class EE_API SceneManager { SINGLETON_DECLARE_HEADERS( SceneManager ) public: SceneManager(); ~SceneManager(); + SceneNode* add(SceneNode* sceneNode ); + + bool remove( SceneNode* sceneNode ); + + size_t count() const; + void draw(); void update( const Time& elapsed ); @@ -39,6 +45,7 @@ class EE_API SceneManager : public Container { Clock mClock; UISceneNode* mUISceneNode; bool mIsShootingDown; + std::vector mSceneNodes; }; }} // namespace EE::Scene diff --git a/include/eepp/system/container.hpp b/include/eepp/system/container.hpp index d20c9d1f0..c73bbb006 100644 --- a/include/eepp/system/container.hpp +++ b/include/eepp/system/container.hpp @@ -2,7 +2,7 @@ #define EE_SYSTEMTCONTAINER_HPP #include -#include +#include namespace EE { namespace System { @@ -23,7 +23,7 @@ template class Container { Uint32 count(); protected: - std::list mResources; + std::unordered_set mResources; }; template Container::Container() {} @@ -32,7 +32,7 @@ template Container::~Container() {} template T* Container::add( T* resource ) { if ( NULL != resource ) { - mResources.push_back( resource ); + mResources.insert( resource ); return resource; } @@ -42,7 +42,7 @@ template T* Container::add( T* resource ) { template bool Container::remove( T* resource ) { if ( NULL != resource ) { - mResources.remove( resource ); + mResources.erase( resource ); return true; } diff --git a/src/eepp/graphics/framebuffermanager.cpp b/src/eepp/graphics/framebuffermanager.cpp index dd77fb992..64391cc67 100644 --- a/src/eepp/graphics/framebuffermanager.cpp +++ b/src/eepp/graphics/framebuffermanager.cpp @@ -10,10 +10,8 @@ FrameBufferManager::FrameBufferManager() {} FrameBufferManager::~FrameBufferManager() {} void FrameBufferManager::reload() { - std::list::iterator it; - - for ( it = mResources.begin(); it != mResources.end(); ++it ) - ( *it )->reload(); + for ( auto& fb : mResources ) + fb->reload(); } FrameBuffer* FrameBufferManager::getCurrentlyBound() { @@ -22,11 +20,9 @@ FrameBuffer* FrameBufferManager::getCurrentlyBound() { glGetIntegerv( GL_FRAMEBUFFER_BINDING, &curFB ); if ( 0 != curFB ) { - std::list::iterator it; - - for ( it = mResources.begin(); it != mResources.end(); ++it ) { - if ( ( *it )->getFrameBufferId() == curFB ) { - return ( *it ); + for ( auto& fb : mResources ) { + if ( fb->getFrameBufferId() == curFB ) { + return fb; } } } @@ -39,11 +35,9 @@ FrameBuffer* FrameBufferManager::getFromName( const std::string& name ) { } FrameBuffer* FrameBufferManager::getFromId( const Uint32& id ) { - std::list::iterator it; - - for ( it = mResources.begin(); it != mResources.end(); ++it ) { - if ( ( *it )->getId() == id ) { - return ( *it ); + for ( auto& fb : mResources ) { + if ( fb->getId() == id ) { + return fb; } } diff --git a/src/eepp/graphics/vertexbuffermanager.cpp b/src/eepp/graphics/vertexbuffermanager.cpp index a7a3fdd81..937bf277c 100644 --- a/src/eepp/graphics/vertexbuffermanager.cpp +++ b/src/eepp/graphics/vertexbuffermanager.cpp @@ -9,10 +9,8 @@ VertexBufferManager::VertexBufferManager() {} VertexBufferManager::~VertexBufferManager() {} void VertexBufferManager::reload() { - std::list::iterator it; - - for ( it = mResources.begin(); it != mResources.end(); ++it ) - ( *it )->reload(); + for ( auto& vb : mResources ) + vb->reload(); } }}} // namespace EE::Graphics::Private diff --git a/src/eepp/scene/scenemanager.cpp b/src/eepp/scene/scenemanager.cpp index 52eef32fa..f0530da4b 100644 --- a/src/eepp/scene/scenemanager.cpp +++ b/src/eepp/scene/scenemanager.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -11,25 +12,40 @@ SceneManager::SceneManager() : mUISceneNode( NULL ), mIsShootingDown( false ) {} SceneManager::~SceneManager() { mIsShootingDown = true; - for ( auto it = mResources.begin(); it != mResources.end(); it++ ) { - eeSAFE_DELETE( ( *it ) ); + for ( auto& it : mSceneNodes ) { + SceneNode* node = it; + eeSAFE_DELETE( node ); } - mResources.clear(); + mSceneNodes.clear(); +} + +SceneNode* SceneManager::add( SceneNode* sceneNode ) { + mSceneNodes.push_back( sceneNode ); + return sceneNode; +} + +bool SceneManager::remove( SceneNode* sceneNode ) { + auto it = std::find( mSceneNodes.begin(), mSceneNodes.end(), sceneNode ); + if ( it != mSceneNodes.end() ) { + mSceneNodes.erase( it ); + return true; + } + return false; +} + +size_t SceneManager::count() const { + return mSceneNodes.size(); } void SceneManager::draw() { - for ( auto it = mResources.begin(); it != mResources.end(); it++ ) { - SceneNode* sceneNode = ( *it ); - + for ( auto& sceneNode : mSceneNodes ) { sceneNode->draw(); } } void SceneManager::update( const Time& elapsed ) { - for ( auto it = mResources.begin(); it != mResources.end(); it++ ) { - SceneNode* sceneNode = ( *it ); - + for ( auto& sceneNode : mSceneNodes ) { sceneNode->update( elapsed ); } } @@ -44,9 +60,7 @@ bool SceneManager::isShootingDown() const { UISceneNode* SceneManager::getUISceneNode() { if ( NULL == mUISceneNode ) { - for ( auto it = mResources.begin(); it != mResources.end(); it++ ) { - SceneNode* sceneNode = ( *it ); - + for ( auto& sceneNode : mSceneNodes ) { if ( sceneNode->isUISceneNode() ) { mUISceneNode = sceneNode->asType(); break; diff --git a/src/eepp/scene/scenenode.cpp b/src/eepp/scene/scenenode.cpp index 5a1f9165b..8e6bcacff 100644 --- a/src/eepp/scene/scenenode.cpp +++ b/src/eepp/scene/scenenode.cpp @@ -130,11 +130,11 @@ void SceneNode::draw() { void SceneNode::update( const Time& time ) { mElapsed = time; + mActionManager->update( time ); + if ( NULL != mEventDispatcher ) mEventDispatcher->update( time ); - mActionManager->update( time ); - checkClose(); if ( !mScheduledUpdateRemove.empty() ) { diff --git a/src/eepp/system/packmanager.cpp b/src/eepp/system/packmanager.cpp index 1614f0eb6..ae92496e4 100644 --- a/src/eepp/system/packmanager.cpp +++ b/src/eepp/system/packmanager.cpp @@ -15,15 +15,13 @@ Pack* PackManager::exists( std::string& path ) { FileSystem::filePathRemoveProcessPath( tpath ); - std::list::iterator it; - - for ( it = mResources.begin(); it != mResources.end(); ++it ) { - if ( -1 != ( *it )->exists( tpath ) ) { + for ( auto& pack : mResources ) { + if ( -1 != pack->exists( tpath ) ) { if ( path.size() != tpath.size() ) { path = tpath; } - return ( *it ); + return pack; } } @@ -31,11 +29,9 @@ Pack* PackManager::exists( std::string& path ) { } Pack* PackManager::getPackByPath( std::string path ) { - std::list::iterator it; - - for ( it = mResources.begin(); it != mResources.end(); ++it ) { - if ( path == ( *it )->getPackPath() ) { - return ( *it ); + for ( auto& pack : mResources ) { + if ( path == pack->getPackPath() ) { + return pack; } } diff --git a/src/tests/ui_perf_test/ui_perf_test.cpp b/src/tests/ui_perf_test/ui_perf_test.cpp index b0a250b12..9ac0de487 100644 --- a/src/tests/ui_perf_test/ui_perf_test.cpp +++ b/src/tests/ui_perf_test/ui_perf_test.cpp @@ -101,7 +101,7 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) { SceneManager::instance()->update();*/ total.restart(); - for ( size_t i = 0; i < 10000; i++ ) { + for ( size_t i = 0; i < 100000; i++ ) { auto* widget = UIWidget::New(); widget->setParent( vlay ); widget->setLayoutSizePolicy( SizePolicy::MatchParent, SizePolicy::Fixed ); @@ -116,8 +116,6 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) { std::cout << "Time UIWidget total: " << total.getElapsedTime().asMilliseconds() << " ms" << std::endl; - win->close(); - /*UIWindow* wind = UIWindow::New(); wind->setSize( 500, 500 ); wind->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_RESIZEABLE | UI_WIN_MAXIMIZE_BUTTON );