mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-05-30 18:16:31 +03:00
Fixed base container class.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() ) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user