diff options
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r-- | src/core/gameserver.cc | 73 |
1 files changed, 15 insertions, 58 deletions
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index 53698c2..717ce87 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -553,71 +553,28 @@ void GameServer::frame(float seconds) } } - // send updates - if (server_network) { - // FIXME prevent connecting clients from receiving update frames - - // transmit buffered sends - server_network->transmit(); - - // start server frame - 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(); ) { - - Entity *entity = (*it).second; - - if (entity->entity_destroyed) { - - if (!entity->entity_created) { - server_network->broadcast_entity_delete(entity); - } - - 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; - entity->entity_dirty = false; - } else if (entity->dirty()) { - - server_network->broadcast_entity_update(entity); - entity->entity_dirty = false; - } - ++it; - } - } + if (server_network) { - // update player info - server_network->broadcast_player_update(); + // send network updates + server_network->frame(server_time, server_previoustime); - // transmit buffered sends - server_network->transmit(); + } - } else { + for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); ) { + Entity *entity = (*it).second; - // local update stub - for (Entity::Registry::iterator it=Entity::registry().begin(); it != Entity::registry().end(); ) { - Entity *entity = (*it).second; - - if (entity->entity_destroyed) { - delete entity; - (*it).second = entity = 0; - Entity::registry().erase(it++); - } else { - entity->entity_created = false; - entity->entity_dirty = false; - ++it; - } + if (entity->entity_destroyed) { + delete entity; + (*it).second = entity = 0; + Entity::registry().erase(it++); + } else { + entity->entity_created = false; + entity->entity_dirty = false; + ++it; } } - + if (!Cvar::sv_dedicated->value()) { update_clientstate(0); } |