diff options
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r-- | src/core/gameserver.cc | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index db8852a..53698c2 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -564,7 +564,7 @@ void GameServer::frame(float seconds) server_network->broadcast_frame(server_time, server_previoustime); // send changes in the world - for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); it++) { + for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); ) { Entity *entity = (*it).second; @@ -574,19 +574,24 @@ void GameServer::frame(float seconds) server_network->broadcast_entity_delete(entity); } - core::Entity::erase(entity->id()); + delete entity; + (*it).second = entity = 0; + Entity::registry().erase(it++); - } else if (entity->entity_created) { - - server_network->broadcast_entity_create(entity); - entity->entity_created = false; - - } else if (entity->dirty()) { - - server_network->broadcast_entity_update(entity); + } else { + if (entity->entity_created) { + + server_network->broadcast_entity_create(entity); + entity->entity_created = false; + entity->entity_dirty = false; + + } else if (entity->dirty()) { + + server_network->broadcast_entity_update(entity); + entity->entity_dirty = false; + } + ++it; } - - entity->entity_dirty = false; } // update player info @@ -598,17 +603,18 @@ void GameServer::frame(float seconds) } else { // local update stub - for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); it++) { - + for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); ) { Entity *entity = (*it).second; - if (entity->entity_destroyed) { - Entity::erase(entity->id()); - } else if (entity->entity_created) { + if (entity->entity_destroyed) { + delete entity; + (*it).second = entity = 0; + Entity::registry().erase(it++); + } else { entity->entity_created = false; - + entity->entity_dirty = false; + ++it; } - entity->entity_dirty = false; } } |