Fixed base container class.

This commit is contained in:
Martín Lucas Golini
2020-05-04 05:37:15 -03:00
parent 909088b46d
commit e35efc7012
8 changed files with 57 additions and 50 deletions

View File

@@ -16,13 +16,19 @@ namespace EE { namespace Scene {
class SceneNode;
class EE_API SceneManager : public Container<SceneNode> {
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<SceneNode> {
Clock mClock;
UISceneNode* mUISceneNode;
bool mIsShootingDown;
std::vector<SceneNode*> mSceneNodes;
};
}} // namespace EE::Scene

View File

@@ -2,7 +2,7 @@
#define EE_SYSTEMTCONTAINER_HPP
#include <eepp/config.hpp>
#include <list>
#include <unordered_set>
namespace EE { namespace System {
@@ -23,7 +23,7 @@ template <class T> class Container {
Uint32 count();
protected:
std::list<T*> mResources;
std::unordered_set<T*> mResources;
};
template <class T> Container<T>::Container() {}
@@ -32,7 +32,7 @@ template <class T> Container<T>::~Container() {}
template <class T> T* Container<T>::add( T* resource ) {
if ( NULL != resource ) {
mResources.push_back( resource );
mResources.insert( resource );
return resource;
}
@@ -42,7 +42,7 @@ template <class T> T* Container<T>::add( T* resource ) {
template <class T> bool Container<T>::remove( T* resource ) {
if ( NULL != resource ) {
mResources.remove( resource );
mResources.erase( resource );
return true;
}

View File

@@ -10,10 +10,8 @@ FrameBufferManager::FrameBufferManager() {}
FrameBufferManager::~FrameBufferManager() {}
void FrameBufferManager::reload() {
std::list<FrameBuffer*>::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<FrameBuffer*>::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<FrameBuffer*>::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;
}
}

View File

@@ -9,10 +9,8 @@ VertexBufferManager::VertexBufferManager() {}
VertexBufferManager::~VertexBufferManager() {}
void VertexBufferManager::reload() {
std::list<VertexBuffer*>::iterator it;
for ( it = mResources.begin(); it != mResources.end(); ++it )
( *it )->reload();
for ( auto& vb : mResources )
vb->reload();
}
}}} // namespace EE::Graphics::Private

View File

@@ -1,3 +1,4 @@
#include <algorithm>
#include <eepp/scene/scenemanager.hpp>
#include <eepp/scene/scenenode.hpp>
#include <eepp/ui/uiscenenode.hpp>
@@ -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<UISceneNode>();
break;

View File

@@ -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() ) {

View File

@@ -15,15 +15,13 @@ Pack* PackManager::exists( std::string& path ) {
FileSystem::filePathRemoveProcessPath( tpath );
std::list<Pack*>::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<Pack*>::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;
}
}

View File

@@ -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 );