Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r--src/core/gameserver.cc73
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);
}