Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-07-31 12:43:43 +0000
committerStijn Buys <ingar@osirion.org>2008-07-31 12:43:43 +0000
commit3da609588ad6fe7eb0581e4678a2ec8c6c1c4a18 (patch)
tree6824ff50935275424156f34fd5ec7912c1f4b055 /src/core/gameserver.cc
parent02f6bfcef4f2e8b0fdbf12c652ab202edbeed19a (diff)
more heisenbugs fixes
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r--src/core/gameserver.cc44
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;
}
}