Skip to content

Commit

Permalink
Fix entity manager (#310)
Browse files Browse the repository at this point in the history
* Fix entity management to deal with removal issue (similar to issue #308) ;
* Change entity renaming scheme to name + "_" + #n ;
  • Loading branch information
hoshiryu authored and nmellado committed May 16, 2018
1 parent d012e5e commit b7218e1
Showing 1 changed file with 23 additions and 20 deletions.
43 changes: 23 additions & 20 deletions src/Engine/Managers/EntityManager/EntityManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,29 @@ namespace Ra

Entity* EntityManager::createEntity( const std::string& name )
{

std::string entityName = name;
if ( entityExists( name ) )
{
LOG( logWARNING ) << "Entity `" << name << "` already exists";
entityName = name + "_";
}
Core::Index idx = m_entities.emplace( new Entity(entityName) );
Core::Index idx = m_entities.emplace( new Entity(name) );
auto& ent = m_entities[idx];
ent->idx = idx;

std::string eName = name;
if (name == "")
{
std::string name;
Core::StringUtils::stringPrintf( name, "Entity_%u", idx.getValue() );
ent->rename( name );
Core::StringUtils::stringPrintf( eName, "Entity_%u", idx.getValue() );
ent->rename( eName );
} else
{
uint i=1;
bool mustRename = false;
while( entityExists( eName ) )
{
LOG( logWARNING ) << "Entity `" << eName << "` already exists";
eName = name + "_" + std::to_string( i++ );
mustRename = true;
}
if (mustRename)
{
ent->rename( eName );
}
}

m_entitiesName.insert( std::pair<std::string, Core::Index> (
Expand Down Expand Up @@ -90,14 +97,10 @@ namespace Ra
std::vector<Entity*> EntityManager::getEntities() const
{
std::vector<Entity*> entities;
uint size = m_entities.size();
entities.resize( m_entities.size() );

entities.reserve( size );

for ( uint i = 0; i < size; ++i )
{
entities.push_back( m_entities[i].get() );
}
std::transform( m_entities.begin(), m_entities.end(), entities.begin(),
[](const auto &e){ return e.get(); } );

return entities;
}
Expand All @@ -113,9 +116,9 @@ namespace Ra

void EntityManager::swapBuffers()
{
for ( uint i = 0; i < m_entities.size(); ++i )
for ( auto& e : m_entities )
{
m_entities[i]->swapTransformBuffers();
e->swapTransformBuffers();
}
}

Expand Down

0 comments on commit b7218e1

Please sign in to comment.